'++LotusScript Development Environment:2:5:(Options):0:66
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Initialize
Declare Sub Terminate
Declare Sub Main
Declare Sub GetProfileSettings
Declare Sub CreateLogDocument
Declare Sub ProcessDocuments
Declare Sub EvaluateDocument
Declare Sub ArchiveDocument
Declare Sub FixReaderNames
Declare Sub AddDocumentToLog
Declare Sub CloseLogDocument
Declare Sub MarkLogDocuments
'++LotusScript Development Environment:2:5:(Declarations):0:10
'%INCLUDE "lserr.lss"
'%INCLUDE "lsxbeerr.lss"
Const MAXARCHIVEITEMS = 50
Dim session As NotesSession
Dim dbSource As NotesDatabase
Dim dbArchive As NotesDatabase
Dim docSource As NotesDocument
Dim docArchive As NotesDocument
Dim docLog As NotesDocument
Dim docProfile As NotesDocument
Dim viewArchive As NotesView
Dim dtNow As NotesDateTime
Dim dtExpired As NotesDateTime
Dim dtDocument As NotesDateTime
Dim dtCompare As NotesDateTime
Dim docsCollection As NotesDocumentCollection
Dim rtitem As NotesRichTextItem
Dim item As NotesItem
Dim nidArray() As String
Dim SourcePath As String
Dim SourceServer As String
Dim ArchiveServer As String
Dim ArchivePath As String
Dim ArchiveLog As String
Dim IncludeDocLinks As String
Dim ArchiveExpired As String
Dim ArchiveInactive As String
Dim ExpiredLife As Integer
Dim DocumentLife As Integer
Dim nLogItems As Integer
Dim numDocs As Integer
Dim numDocsArchived As Integer
Dim i As Integer
Dim DoNotRun As Variant
Dim DocCanBeArchived As Variant
'++LotusScript Development Environment:2:2:Initialize:1:10
Sub Initialize
'initialize some variables
Set session = New NotesSession
Set dbSource = session.CurrentDatabase
Redim nidArray(5)
nLogItems = 0
numDocsArchived = 0
'call the main entry point
Main
End Sub
'++LotusScript Development Environment:2:2:Terminate:1:10
Sub Terminate
End Sub
'++LotusScript Development Environment:2:2:Main:1:8
Sub Main
'Read the profile document to see what options are enabled and where databases are located
GetProfileSettings
If DoNotRun Then Exit Sub
'setup the date/time structures
Set dtNow = New NotesDateTime("")
Set dtExpired = New NotesDateTime("")
Set dtDocument = New NotesDateTime("")
Set dtCompare = New NotesDateTime("")
dtNow.SetNow
dtExpired.SetNow
dtDocument.SetNow
dtCompare.SetNow
If ArchiveExpired = "Yes" Then dtExpired.AdjustDay(ExpiredLife * -1)
If ArchiveInactive = "Yes" Then dtDocument.AdjustDay(DocumentLife * -1)
'open the archive database
On Error Resume Next
Set dbArchive = New NotesDatabase(ArchiveServer,ArchivePath)
If Err = 4060 Then Goto ErrNoDBAccess
If Not (dbArchive.IsOpen) Then
Messagebox "Unable to open archive database.",16,"Error"
Exit Sub
End If
'see if we are logging documents, if we are, then create the first one
If ArchiveLog = "Yes" Then CreateLogDocument
'process the documents in the database
'this finds all documents that needs to be archived, archives them, logs them (if necessary), and removes them from this database
ProcessDocuments
'mark the log documents in terms of x out of y
If ArchiveLog = "Yes" Then MarkLogDocuments
Exit Sub
ErrNoDBAccess:
Messagebox "You do not have access to the archive database. Please contact the database manager to have your name added to the Access Control List.", 0, "Database Access Error"
Exit Sub
End Sub
'++LotusScript Development Environment:2:2:GetProfileSettings:1:8
Sub GetProfileSettings
'reads the profile document
Set view = dbSource.GetView("Archiving")
key = "Archive Profile"
Set docProfile = view.GetDocumentByKey(key,False)
If docProfile Is Nothing Then
'there is no profile document so exit
DoNotRun = True
Elseif docProfile.ArchivePath(0) = "" Then
'there is no archive database
Msgbox "You need to specify a location for the archive database.",16,"Error"
DoNotRun = True
Else
DoNotRun = False
ArchiveExpired = docProfile.ArchiveExpired(0)
ArchiveInactive = docProfile.ArchiveInactive(0)
DocumentLife = docProfile.DocumentLife(0)
ExpiredLife = docProfile.ExpiredLife(0)
ArchiveServer = docProfile.ArchiveServer(0)
ArchivePath = docProfile.ArchivePath(0)
ArchiveLog = docProfile.ArchiveLog(0)
IncludeDocLinks = docProfile.IncludeDocLinks(0)
End If
End Sub
'++LotusScript Development Environment:2:2:CreateLogDocument:1:8
Sub CreateLogDocument
'creates a new log document, incrementing the counter
Set docLog = New NotesDocument(dbSource)
Set rtitem = New NotesRichTextItem(docLog, "Body")
docLog.Form = "Archive Log"
dtNow.SetNow
docLog.ArchiveDate = dtNow.LSLocalTime
docLog.ProtectFromArchive = 1
docLog.ExcludeFromView = "D"
docLog.From = "Archiving"
docLog.Categories = "(Archive)"
docLog.ReplaceItemValue "_ViewIcon", 22
nLogItems = nLogItems + 1
'see if we need to redim the array
If nLogItems Mod 6 = 0 Then Redim Preserve nidArray(nLogItems + 4)
End Sub
'++LotusScript Development Environment:2:2:ProcessDocuments:1:8
Sub ProcessDocuments
'get a handle to all of the documents in the database
Set docsCollection = dbSource.AllDocuments
numDocs = docsCollection.Count
For i =1 To numDocs
Set docSource = docsCollection.GetNthDocument(i)
'see if this document can be archived
EvaluateDocument
If DocCanBeArchived Then
'archive this document
ArchiveDocument
If ArchiveLog = "Yes" Then AddDocumentToLog
docSource.Remove True
End If
'see if we have hit the maximum number of entries in a log document; if so close the existing one and create a new one
If (numDocsArchived Mod MAXARCHIVEITEMS = 0) And (numDocsArchived > 0) Then
If ArchiveLog = "Yes" Then
CloseLogDocument
CreateLogDocument
End If
End If
Next
'we are done processing all of the documents, close the last log document (if necessary)
If ArchiveLog = "Yes" Then CloseLogDocument
End Sub
'++LotusScript Development Environment:2:2:EvaluateDocument:1:8
Sub EvaluateDocument
'checks to see if a document should be archived or not
DocCanBeArchived = False
'see if this document is protected from archiving
If docSource.HasItem("ProtectFromArchive") Then
If docSource.ProtectFromArchive(0) = 1 Then Exit Sub
End If
'look for a $NoPurge item; if it is a date, compare it to today;
If (docSource.HasItem("$NoPurge")) Then
Set Purge = docSource.GetFirstItem("$NoPurge")
If (Purge.Type = DATETIMES) Then
Set enddt = New NotesDateTime("")
Set enddt = Purge.DateTimeValue
Set nowdt = New NotesDateTime("")
nowdt.SetNow
If enddt.TimeDifference(nowdt) >= 0 Then Exit Sub
Else
Exit Sub
End If
End If
'see if we should archive documents that expire
If ArchiveExpired = "Yes" Then
If docSource.HasItem("ExpireDate") Then
Set item = docSource.GetFirstItem("ExpireDate")
Set dtCompare = item.DateTimeValue
If dtCompare Is Nothing Then
Set dtCompare = New NotesDateTime("")
dtCompare.SetNow
Else
If dtExpired.TimeDifference(dtCompare) >= 0 Then
DocCanBeArchived = True
Exit Sub ' we exit here so that we don't archive this document again
End If
End If
End If
End If
'see if we should archive documents that are inactive
If ArchiveInactive = "Yes" Then
dtCompare.LSLocalTime = docSource.LastAccessed
If dtDocument.TimeDifference(dtCompare) >= 0 Then DocCanBeArchived = True
End If
End Sub
'++LotusScript Development Environment:2:2:ArchiveDocument:1:8
Sub ArchiveDocument
'copies the source document into the archive database
$Archived and DateArchived might already be present, if this agent failed the last
time it was run. None of these fields should be on the archived copy, because we
don't want the archive database to inadvertantly archive these documents (it can
archive, but it needs to use its own criteria)
%END REM
If docSource.HasItem("$Archived") Then docSource.RemoveItem("$Archived")
If docSource.HasItem("DateArchived") Then docSource.RemoveItem("DateArchived")
If docSource.HasItem("ExpireDate") Then docSource.RemoveItem("ExpireDate")
FixReaderNames
docSource.Save True, True
Set docArchive = docSource.CopyToDatabase(dbArchive)
docSource.DateArchived = dtNow.LSLocalTime
Call docSource.AppendItemValue("$Archived", True)
docSource.Save True, True
numDocsArchived = numDocsArchived + 1
End Sub
'++LotusScript Development Environment:2:2:FixReaderNames:1:8
Sub FixReaderNames
'if the reader access fields are blank, remove them
If docSource.HasItem("Readers") Then
If docSource.Readers(0) = "" Then docSource.RemoveItem("Readers")
End If
If docSource.HasItem("DocumentReaders") Then
If docSource.DocumentReaders(0) = "" Then docSource.RemoveItem("DocumentReaders")
End If
End Sub
'++LotusScript Development Environment:2:2:AddDocumentToLog:1:8
Sub AddDocumentToLog
'only called if a document was archived and logging was enabled
If IncludeDocLinks = "Yes" Then
'the user wants a doclink to the new archived document
Call rtitem.AppendDocLink(docArchive, "DocLink to " & docSource.Subject(0))
Call rtitem.AddTab(1)
End If
Call rtitem.AppendText(" " & docSource.Subject(0) & " (created by " & docSource.From(0) & " on " &_
Format(docSource.Created, "Short Date") & ")")
Call rtitem.AddNewLine(2)
End Sub
'++LotusScript Development Environment:2:2:CloseLogDocument:1:8
Sub CloseLogDocument
'saves the log document, adds the note id to the array,
docLog.Save True, True
nidArray(nLogItems) = docLog.NoteID
End Sub
'++LotusScript Development Environment:2:2:MarkLogDocuments:1:8
Sub MarkLogDocuments
'finds all of the log documents just created and marks them in terms of x out of y
For i = 1 To nLogItems
Set docLog = dbSource.GetDocumentByID(nidArray(i))
Messagebox "You do not have access to the archive database. Please contact the database manager to have your name added to the Access Control List.",0,"Database Access Error"
Exit Sub
End Sub
'++LotusScript Development Environment:2:2:ArchiveDocument:1:8
Sub ArchiveDocument
On Error Goto ErrorRoutine
On Error ErrObjectVariableNotSet Resume Next
Dim Purge As NotesItem
$Archived and DateArchived might already be present, if this agent failed the last
time it was run. None of these fields should be on the archived copy, because we
don't want the archive database to inadvertantly archive these documents (it can
archive, but it needs to use its own criteria)
%END REM
'If this type of form does not get archived then exit
If note.HasItem("ProtectFromArchive") Then
ProtectFromArchive = note.ProtectFromArchive
If ProtectFromArchive(0) = 1 Then Exit Sub
End If
'look for a $NoPurge item; if it is a date, compare it to today;
If (note.HasItem("$NoPurge")) Then
Set Purge = note.GetFirstItem("$NoPurge")
If (Purge.Type = DATETIMES) Then
Set enddt = New NotesDateTime("")
Set enddt = Purge.DateTimeValue
Set nowdt = New NotesDateTime("")
nowdt.SetNow
If enddt.TimeDifference(nowdt) >= 0 Then
Messagebox |The document "| & note.Subject(0) & |" could not be archived since the end date has not passed.|,0,"Status"
Exit Sub
End If
Else
Exit Sub
End If
End If
If note.HasItem("$Archived") Then note.RemoveItem("$Archived")
If note.HasItem("DateArchived") Then note.RemoveItem("DateArchived")
If note.HasItem("ExpireDate") Then note.RemoveItem("ExpireDate")
' Guess whether this is an internet address or and X.400/Notes address
If IsInternetAddress(fromItem(0)) Then
' It's an Internet address
full = GetInternetFullName(fromItem(0))
addressType = INTERNET
Else
' See if there are any slashes at all in the address
pos = Instr(fromItem(0), "/")
If pos = 0 Then
full = fromItem(0)
addressType = NOTES
Else
' Check to see if this is a canonical name
full = GetAttribute(fromItem(0), "CN")
' If there are no /P and /A attributes, guess that this is a Notes address
If pos = 0 Or (full <> "" And GetAttribute(fromItem(0), "/P") = "" And GetAttribute(fromItem(0), "/A") = "") Then
' It's a Notes address
addressType = NOTES
Else
addressType = X400
first = GetAttribute(fromItem(0), "/G")
last = GetAttribute(fromItem(0), "/S")
' try to get the common name, if it isn't there, make it from first and last name
full = GetAttribute(fromItem(0), "/CN")
If full = "" Then
If first <> "" Then
full = first + " " + last
Else
full = last
End If
End If
End If
End If
End If
gotFullName:
' if last is not empty then the name has already been parsed
If last = "" Then
full = Deflate(full)
full = FixFullName(full)
first = GetFirst(full)
last = GetLast(full)
End If ' last <> ""
If addressType = NOTES Then
full = fromItem(0)
mailAddress = full
End If
' If this person has already been added or it's you, skip it
If Iselement(alreadyAdded(full)) Goto nextDocument
Dim fullname As New notesname(full)
If Not addressDB.IsOpen Then Call addressDB.Open( "", AddressBook )
If addressDB.IsOpen Then
Dim view As NotesView
Set view = addressDb.GetView("($People)")
If view Is Nothing Then
' tell them you cannot check
Else
Dim tempDoc As NotesDocument
Dim searchKeys As String
searchKeys = Left(last, 1)
Set tempDoc = view.GetDocumentByKey(searchKeys)
NameFound = False
Do Until tempdoc Is Nothing
If tempDoc.FullName(0) = fullname.Canonical Then
NameFound = True
Exit Do
Else
Set tempDoc = view.GetNextDocument(tempDoc)
If tempDoc Is Nothing Then Exit Do
If Left(tempDoc.LastName(0), 1) <> searchKeys Then Exit Do
End If
Loop
If NameFound Then
' Don't prompt if we are doing 10 people or more, chances are that this will be an unattended operation. Default to no.
If docCount > 10 Goto nextDocument
If Messagebox (first & " " & last + " is already in your personal address book. Are you sure you want to add this address?", MB_YESNO+MB_ICONQUESTION, _
There are three simple forms for creating a new mail message:
Memo
- Use this form to create a new message
Reply
- Use this form to reply to a message that you have received. This form will work only when you have selected a document to reply to.
Reply With History
- This is
similar to a Reply, except that a copy of the message being replied to will be automatically copied into your new message.
Before you send a message you must fill in the following information:
- The primary recipients of the message. The content of the message is directed to them or they must take action on this message.
- Recipients who will receive a copy of the message, but are not usually required to take action on it.
bcc:
- Recipients who will receive a blind copy of this message.
You can send a message by choosing the "Send" action.
Calendaring and Scheduling
This database can also be used to organize your time, keep a list of tasks and meetings, and create the following kinds of information to share with other Mail users:
Calendar Entry -
Use the Calendar Entry form for both personal appointments and for scheduling meetings with people. Select the Invitation radio-button to schedule a meeting with others. You can send meeting announcements, select Required and Optional attendees, and find free time slots for the people whom you invite.
Bookmark
- Use this form to send another Mail user a reference to a document. It is most useful when reading documents in a database that is shared with others on a server. For example, if you are reading a Discussion database and find a document that may be of use to someone else, creating a Bookmark message will allow that person to find the document very easily.
Phone Message
- Use this form to take a message for another Mail user.
Task
- Use this form to remind yourself of something that you need to do, or to ask another person to do something for you. If you send a Task to another Mail user, or to several users, they will be able to notify you when they have completed the Task.
A special view (see below) has been provided to help you organize your Tasks and Tasks that you have assigned to other people.
A Calendar Profile will automatically be created for you with default settings. The Calendar Profile lets you decide who can view your free time schedule as well as define personal Calendar settings. Use Actions Calendar Tools Calendar Profile to change your Calendar Profile settings.
Folders and Views
The following views and folders are provided for you:
Inbox
Messages that have been sent to you by another Mail user will appear here.
Calendar -
This view looks like a desktop calendar. Appointments you have scheduled will be displayed in two day, one week, two week, or one month calendar pages.
Drafts -
Messages that you have created and saved, but have not yet sent, will appear here.
Sent
- Messages will appear here if you after you have sent them. You can decide whether you want messages saved here automatically or whether you should be asked before a message is saved.
Trash
- Messages that you have marked for deletion will appear here.
Tasks
- Tasks that you have created for yourself and Tasks that you have assigned to other people will appear here. This view will also help you keep track of which Tasks have been completed and when.
Meetings
- Invitations to meetings and responses that people have returned to you will appear here.
In addition, you can create your own folders and views to help organize your Mail database.
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
i.v~g
$INFO
$BODY
_Forward
Categori_zeK
Edit Document
_Move to Folder...
_Remove from Folder...
Setup Archive...L
ArchiveProfile
Server
1S2S6S
0R1S2S6S
Server
0R7S8S11S13S14S15S16S
Archive NowK
Archive Profile
1S2S
AllDocs
NoCache
($Profiles)
ArchivePath
0R1S2S8S10S12S14S
AllDocs
Error
You must specify a location for the archive database
0R3S4S5S6S14S15S
AllDocs2
NoCache
($Profiles)
ArchivePath
Archive Now
Before you can begin archiving documents you need to fill out an Archive Profile. Please press "Setup Archive...".
0RR1S2S12S14S16S18S28S30S34S
Archiving
Are you sure you want to move documents to the archive database now?
0R6S8S11S13S
AlreadyArchived
MailArchived|
Archiving
Since this is the first time you have requested an archive, it may take several minutes. Do you want to proceed?
Archiving
No documents were archived
0RR1S2S8S9S11S13S19S21S24S26S32S34S
MailArchived
0RR1S2S3S
Periodic Archive
0R4S
Server
1S2S6S
0R1S2S6S
Server
0R7S8S11S13S14S15S16S
Enable Scheduled Archivingf
AllDocs
Archiving
Archive Profile
Archive Now
Before you can begin archiving documents you need to fill out an Archive Profile. Please press "Setup Archive...".
1S2S10S12S14S16S20S26S28S32S
Periodic Archive
0RR4S
Server
1S2S6S
0R1S2S6S
Periodic Archive
Server
0R4S5R12S13S16S18S19S20S21S
Disable Scheduled ArchivingKf
AllDocs
Archiving
Archive Profile
Archive Now
Before you can begin archiving documents you need to fill out an Archive Profile. Please press "Setup Archive...".
1S2S10S12S14S16S20S26S28S32S
Periodic Archive
0RR4S
Server
1S2S6S
0R1S2S6S
Periodic Archive
Server
0R7S8R15S16S19S21S22S23S24S
Open Archive Db...'++LotusScript Development Environment:2:5:(Options):0:66
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Click(Source As Button)
'++LotusScript Development Environment:2:5:(Declarations):0:10
Dim s As NotesSession
Dim w As NotesUIWorkspace
Dim sourcedb As NotesDatabase
Dim view As NotesView
Dim profile As NotesDocument
Dim server As String
'++LotusScript Development Environment:2:2:BindEvents:1:129
Private Sub BindEvents(Byval Objectname_ As String)
Static Source As BUTTON
Set Source = Bind(Objectname_)
On Event Click From Source Call Click
End Sub
'++LotusScript Development Environment:2:2:Click:1:12
Sub Click(Source As Button)
On Error Goto ErrorRoutine
'91 is Object Variable Not Set
On Error 91 Resume Next
'4412 is the notes database does not exist
On Error 4412 Goto DatabaseNotExistError
Set s = New NotesSession
Set sourcedb = s.CurrentDatabase
Set view = sourcedb.GetView("($Profiles)")
key = "Archive Profile"
Set profile = view.GetDocumentByKey(key)
If profile Is Nothing Then
Messagebox "There is no Archive Db for this database.", 0 + 64, "Archive"
Exit Sub
End If
ArchivePath = profile.ArchivePath
ArchiveServer = profile.ArchiveServer
If (ArchivePath(0) = "") Then
Messagebox "The archive database cannot be found. Click on the Setup Archive button to create a new archive database.",16,"Database not found"
Route'++LotusScript Development Environment:2:5:(Options):0:66
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Postopen(Source As Notesuidocument)
Declare Sub Querysave(Source As Notesuidocument, Continue As Variant)
Declare Sub Queryclose(Source As Notesuidocument, Continue As Variant)
'++LotusScript Development Environment:2:5:(Declarations):0:2
'++LotusScript Development Environment:2:2:BindEvents:1:129
Private Sub BindEvents(Byval Objectname_ As String)
Static Source As NOTESUIDOCUMENT
Set Source = Bind(Objectname_)
On Event Postopen From Source Call Postopen
On Event Querysave From Source Call Querysave
On Event Queryclose From Source Call Queryclose
End Sub
'++LotusScript Development Environment:2:2:Postopen:1:12
Sub Postopen(Source As Notesuidocument)
Dim cnName As Variant
If source.InPreviewPane Then Exit Sub
If note Is Nothing Then Call InstantiateObjectVariables(source)
cnName = Evaluate("@Name([CN];@Username)")
If (note.HasItem("PostedDate") Or note.HasItem("DeliveredDate")) And source.EditMode = False And Instr(Lcase(note.SendTo(0)), Lcase(cnName(0))) = 0 Then
Exit Sub
Else
source.EditMode = True
End If
If note.From(0) = s.UserName Or source.IsNewDoc Then
If Not(note.HasItem("SecureMail")) Then
CheckSecureMail
source.reload
End If
End If
EditType = s.GetEnvironmentValue("MailStEd")
If EditType = "5" Then
Call note.ReplaceItemValue("$VersionOpt", "6")
note.tmpAction = "ConvertNewDoc"
Call s.SetEnvironmentVar("MailStEd", "0")
source.reload
source.save
End If
End Sub
'++LotusScript Development Environment:2:2:Querysave:1:12
Sub Querysave(Source As Notesuidocument, Continue As Variant)
If note Is Nothing Then Call InstantiateObjectVariables(source)
note.RemoveItem("MailOptions")
note.RemoveItem("SaveOptions")
Action = note.tmpAction
Select Case Action(0)
Case "SaveAsDraft"
note.MailOptions = "0"
note.SaveOptions = "1"
Case "SendAndFile"
If SendToNext(source) = False Then Continue = False
note.SaveOptions = "1"
Case "Send"
If SendToNext(source) = False Then Continue = False
note.SaveOptions = "0"
Case "Mailing"
'We do not want to do anything if mailing is in process (like from the Send button)
Case Else
'If this is a message that was not written by you we do not present the mail dialog
If note.From(0) <> s.UserName Then
note.MailOptions = "0"
note.SaveOptions = "1"
ContinueSave = True
Call SaveDialog("Document")
If ContinueSave = False Then
Continue = False
Exit Sub
End If
End If
End Select
note.RemoveItem("tmpAction")
If note.HasItem("$VersionOpt") Then Call note.ReplaceItemValue("$VersionOpt", "0")
source.Reload
End Sub
'++LotusScript Development Environment:2:2:Queryclose:1:12
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
Every month on the|1Every other month on the|2Every 3rd month on the|3Every 4th month on the|4Every 5th month on the|5Every 6th month on the|6Every 7th month on the|7Every 8th month on the|8Every 9th month on the|9Every 10th month on the|10Every 11th month on the|11Every 12th month on the|12
Messagebox "A confirmation notice has been sent to the invitees.",0,"Status"
End If
End Sub
tmpAccepted
tmpWaiting
0S0E
tmpDelegee
tmpDeclined
tmpDelegated
0S0E
(InviteeResponses)'++LotusScript Development Environment:2:5:(Options):0:66
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
Declare Sub Postopen(Source As Notesuidocument)
'++LotusScript Development Environment:2:5:(Declarations):0:2
'++LotusScript Development Environment:2:2:BindEvents:1:129
Private Sub BindEvents(Byval Objectname_ As String)
Static Source As NOTESUIDOCUMENT
Set Source = Bind(Objectname_)
On Event Queryopen From Source Call Queryopen
On Event Postopen From Source Call Postopen
End Sub
'++LotusScript Development Environment:2:2:Queryopen:1:12
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
End Sub
'++LotusScript Development Environment:2:2:Postopen:1:12
Sub Postopen(Source As Notesuidocument)
Set uidoc = source
Call InstantiateObjectVariables
Call CreateInviteeTable(note)
End Sub
0S0E
Print
NoticeType
1S2S
'++LotusScript Development Environment:2:5:(Options):0:66
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Click(Source As Button)
'++LotusScript Development Environment:2:5:(Declarations):0:2
'++LotusScript Development Environment:2:2:BindEvents:1:129
Private Sub BindEvents(Byval Objectname_ As String)
Static Source As BUTTON
Set Source = Bind(Objectname_)
On Event Click From Source Call Click
End Sub
'++LotusScript Development Environment:2:2:Click:1:12
Sub Click(Source As Button)
Call SendConfirmation
End Sub
New Button
Need a newer version of Notes to execute this button.
0S0E
Send Confirmation
Broadcast
1S2S
Accepted
Counter proposed
tmpAccepted
0S0E
dispAccepted
tmpCounterc
0S0E
dispCounter
Delegated
Declined
tmpDelegated^
tmpDelegated
-> "
tmpDelegee
6S7S8S9S10S11S23S24S25S26S
dispDelegated
tmpDeclined
0S0E
dispDeclined
No response
Removed
tmpWaiting
0S0E
dispWaiting
tmpUninvited
0S0E
dispUnivited
tmpResAccepted
1S2S
tmpResAccepted^
tmpResDeclined^
tmpResWaiting
4S5S6S7S11S12S13S14S18S19S
Rooms/Resources
Reserved
Unavailable
tmpResAccepted
dispResAccepted
tmpResDeclined
dispResDeclined
No response
tmpResWaiting
dispResWaiting
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
$SCRIPTOBJ_6
$FormPublicAccess
$TITLE
$INFO
$Script
$$Script_O
$$ScriptName
$$FormScript
$$$FormScript_O
$BODY
$PublicAccess
(PeopleListDlg)
tmpPeopleList
tmpPeopleSelected
tmpPeopleList
0S0E
tmpHeader
tmpHeader
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
%%3Y~
$FormPublicAccess
$TITLE
$INFO
$$Script_O
$$ScriptName
$BODY
$PublicAccess
*** Message Not Delivered ***
NonDelivery Report
Delivery Failure Report
Your document:
Subject
OriginalSubject
was not delivered to
IntendedRecipient
IntendedRecipient
0S0E
IntendedRecipient
because:
FailureReason
FailureReason
$HideMailHeader
0S0E
What should you do?
You can resend the undeliverable document to the recipients listed above by choosing the Resend button or the Resend command on the Actions menu.
Once you have resent the document you may delete this Delivery Failure Report.
If resending the document is not successful you will receive a new failure report
Unless you receive other Delivery Failure Reports, the document was successfully delivered to all other recipients.
Routing path
RouteServers
RouteServersServers along route.
________________________
To:
SendTo
SendToList of people to send document.
cc:
CopyTo
CopyToList of people to send copies of document.
From:
FromPerson document is from.
Date:
PostedDateY
PostedDateJ
DateTime/date memo was created or mailed.
Subject:
Subject
SubjectSubject of document.
BodyBody of document.
Categori_ze
Closee
0S0E
Edit Document
Resend
Resend|
7S9S
SaveOptions
0R1S2S3S
_Forward
_Move to Folder...
_Remove from Folder...
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
$TITLE
$INFO
$WINDOWTITLE
$$ScriptName
$BODY
$ACTIONS
StdNotesLtr28
tmpDisplayFrom_Preview
tmpFrom
tmpDisplayDate_Preview
tmpDate
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
ebXry
Q^,v:y@
$TITLE
$INFO
$$ScriptName
$BODY
&Arial
StdNotesLtr7
tmpDisplayFrom_Preview
tmpFrom
tmpDisplayDate_Preview
tmpDate
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
:oKM5
$TITLE
$INFO
$$ScriptName
$BODY
(ChangeRepeating)
ChangeWhich
Just this one|0All|1All previous|2All future|3
Change:
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
A ATP
$FormPublicAccess
$TITLE
$INFO
$$Script_O
$$ScriptName
$BODY
$PublicAccess
&Arial
StdNotesLtr26
tmpDisplayFrom_Preview
tmpFrom
tmpDisplayDate_Preview
tmpDate
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
O}\Pq
$TITLE
$INFO
$Header
$$ScriptName
$BODY
Times New Roman
StdNotesLtr15
tmpDisplayFrom_Preview
tmpFrom
tmpDisplayDate_Preview
tmpDate
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
#>Q40V
$TITLE
$INFO
$$ScriptName
$BODY
(CalendarHelp)
Calendar entry--new ->tmpContext = 0
tmpContext
1S2S
When you create a calendar entry, you can specify the type of entry you want to create. You can create an appointment, meeting invitation, event, reminder, or anniversary.
To specify the type of calendar entry, click a
type at the top of the document. Notes displays different
fields depending on
the calendar type
you select.
Enter information in the calendar entry
fields Notes displays.
set an alarm that reminds you about
the calendar entry,
click Alarm options and specify information about the alarm.
To repeat the calendar entry at specified intervals, click Repeat and specify information about how often and how long you want the entry to repeat.
To check your calendar as you are entering information, click Check Calendar. To return to the document, press ESC.
Click Save and Close when you finish entering information
for the calendar entry.
If you created a meeting invitation, click Yes to send
invitations to the invitees.
For information on
each type of calendar entry, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
Calendar entry--existing -> tmpContext = 1
tmpContext
1S2S
You can make changes to an appointment, event, reminder, or anniversary.
If you have not already done so, click Edit Document.
Make changes in
any of
the calendar entry
fields Notes displays.
To set an alarm that reminds you about the calendar entry, click Alarm options and specify information about the alarm.
To check your calendar as you are making changes, click Check Calendar. To return to the document, press ESC.
Click Save and Close.
For information on calendar entries, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
After you create a meeting invitation, you can make changes to the document by clicking Edit Document and doing the following:
Display responses to a meeting invitation by clicking "Display invitee responses."
Change the date, time, or location of the meeting by clicking Edit Document and changing the date or time fields or the reservation section.
Remove an invitee from the invitation list by clicking Edit Document
and choosing Actions - Remove - Invitees.
Cancel a room or resource reservation by clicking Edit Document and choosing Actions - Remove - Rooms & Resources.
Send a confirmation to the invitees by clicking Send Confirmation.
Cancel a meeting by choosing Actions - Cancel Meeting.
Accept a meeting invitation for an invitee by choosing Actions - Change Status to Accepted.
For information on calendar entries, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
You can make changes to a meeting invitation if necessary.
If you have not already done so, click Edit Document.
Make changes in
any of
the calendar entry
fields Notes displays.
change your response to the meeting invitation, choose Actions - Other and select
a different response
Click Save and Close.
For information on meeting invitations, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
Invitation (invitee - no action taken yet) -> tmpContext = "4"
tmpContext
1S2S
When you receive a meeting invitation, you can:
Accept the meeting invitation by clicking Accept.
Accept the meeting invitation tentatively by clicking Other and selecting Pencil In.
Decline the meeting invitation by clicking Decline.
Ask someone to attend the meeting in your place by clicking Other and selecting Delegate.
Propose a different time or location for the meeting by clicking Other and selecting "Propose Alternative Time/Location."
When you receive a broadcast meeting invitation, you can add the broadcast meeting to your calendar by clicking Add to Calendar.
You can also accept meeting invitations from all or from selected people
automatically by using the Meetings option under Autoprocessing Options
in your Calendar Profile.
For information on responding to meeting invitations, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
Declined -> tmpContext = "5"
tmpContext
1S2S
The person you invited to the meeting declined your meeting invitation.
To view a list of invitee responses, open the meeting invitation in the Calendar view and click "Display invitee responses."
For information on meeting invitations, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
Change proposal ->tmpContext = "6"
tmpContext
1S2S
Someone you invited to the meeting proposed an alternative time or location for your meeting. You can accept or decline the proposal.
To accept, click "Accept Counter Proposal." Notes sends a new invitation with the updated meeting information to all invitees. To decline, click "Decline Counter Proposal." Notes sends a message telling the invitee who proposed the change that you declined it.
For information on meeting invitations, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
Reschedule ->tmpContext = "7"
tmpContext
1S2S
The meeting chairperson rescheduled this meeting. You can respond to the rescheduled meeting invitation in one of the following ways:
Accept the meeting invitation by clicking Accept.
Accept the meeting invitation tentatively by clicking Other and selecting Pencil In.
Decline the meeting invitation by clicking Decline.
Ask someone to attend the meeting in your place by clicking Other and selecting Delegate.
Propose a different time or location for the meeting by clicking Other and selecting "Propose Alternative Time/Location."
When you receive a broadcast meeting invitation, you can add the broadcast meeting to your calendar by clicking Add to Calendar.
You can also accept meeting invitations automatically from all or selected people by using the Meetings option under Autoprocessing Options in your Calendar Profile.
For information on responding to meeting invitations, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
Acceptance ->tmpContext = "8"
tmpContext
1S2S
The person you invited to the meeting accepted your meeting invitation.
To view a list of invitee responses, open the meeting invitation in the Calendar view and click "Display invitee responses."
For information on meeting invitations, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
Counter proposal declined ->tmpContext = "9"
tmpContext
1S2S
The meeting chairperson declined the alternative time or location you proposed. You can respond to the meeting invitation in one of the following ways:
Accept the meeting invitation by clicking Accept.
Accept the meeting invitation tentatively by clicking Other and selecting Pencil In.
Decline the meeting invitation by clicking Decline.
Ask someone to attend the meeting in your place by clicking Other and selecting Delegate.
Propose another time or location for the meeting by clicking Other and selecting "Propose Alternative Time/Location."
You can also accept meeting invitations automatically from all or selected people by using the Meetings option under Autoprocessing Options in your Calendar Profile.
For information on responding to meeting invitations, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
Cancelled ->tmpContext = "10"
tmpContext
1S2S
The chairperson cancelled this meeting. You do not need to respond to this message. Notes automatically removed the meeting from your calendar.
For information on meeting invitations, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
Status update - Uninvite -> tmpContext = "11"
tmpContext
1S2S
You are no longer required to attend this meeting. You do not need to respond to this message. Notes automatically removed the meeting from your calendar.
For information on meeting invitations, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
Status update - Change Status to Accepted -> tmpContext = "12"
tmpContext
1S2S
You are required to attend this meeting. You do not need to respond to this message. Notes automatically added the meeting to your calendar.
For information on responding to meeting invitations, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
Confirmation -> tmpContext = "13"
tmpContext
1S2S
The chairperson sent this message to remind you of an upcoming meeting. You do not need to respond to this message. If you can no longer attend the meeting, open the original meeting invitation and choose Actions - I Can No Longer Attend.
For information on meeting invitations, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
Delegation -> tmpContext = "14"
tmpContext
1S2S
Someone delegated this meeting invitation to you. You can respond to the meeting invitation in one of the following ways:
Accept the meeting invitation by clicking Accept.
Accept the meeting invitation tentatively by clicking Other and selecting Pencil In.
Decline the meeting invitation by clicking Decline.
Ask someone to attend the meeting in your place by clicking Other and selecting Delegate.
Propose a different time or location for the meeting by clicking Other and selecting "Propose Alternative Time/Location."
You can also accept meeting invitations automatically from all or selected people by using the Meetings option under Autoprocessing Options in your Calendar Profile.
For information on responding to meeting invitations, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
Delegated Invitation -> tmpContext = "15"
tmpContext
1S2S
The person you invited to this meeting delegated the invitation to someone else.
To view a list of invitee responses, open the meeting invitation in the Calendar view and click "Display invitee responses."
For information on meeting invitations, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
You can make changes to a meeting invitation if necessary.
If you have not already done so, click Edit Document.
Make changes in any of
the calendar entry
fields Notes displays.
change your response to the meeting invitation, choose Actions - Other and select
a different response.
Click Save and Close.
For information on meeting invitations, choose Help - Help Topics, select How do I...?, select Do Everyday Tasks, and select 07 Use the Calendar, Assign Tasks, and Schedule Meetings.
Propose alternative time/location -> tmpContext = "17"
tmpContext
1S2S
You proposed a different time or location for the meeting. Notes sends this counter-proposal to the meeting chairperson.
When the chairperson accepts or declines the proposal, Notes sends you the chairperson's response.
Categori_zeK
_Edit Document
Send Docu_ment
_Forward
_Move To Folder...
_Remove From FolderK
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
B@BuW8
Uo-xO
$FormPublicAccess
$TITLE
$INFO
$$ScriptName
$BODY
$ACTIONS
$PublicAccess
New Memo.
0S0E
Delete
0S0E
Move To Folder...
0S0E
_Forward
Reply
Reply
0S0E
Reply With History@
Reply with history
0S0E
Categori_zeK
_Edit Document
Send
Resend
NonDelivery Report
Not a Delivery Failure Report
You cannot Resend a message unless it is a Delivery Failure Report.
6S12S17S23S
Convert To TaskK0
ConvertToTask
_Move To Folder...
_Remove From Folder...
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
$Name
$TITLE
$Index
$Formula
$FormulaClass
$VIEWFORMAT
$Comment
$ACTIONS
Archive Profile
Times New Roman
'++LotusScript Development Environment:2:5:(Options):0:66
Option Public
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Initialize
Declare Sub ProcessExistingArchiveDB
Declare Sub ProcessNonExistingArchiveDB
Declare Sub ProcessArchiveDbExists
Declare Sub CreateNewArchiveDB
'++LotusScript Development Environment:2:5:(Declarations):0:10
%INCLUDE "lsconst.lss"
Dim s As NotesSession
Dim w As NotesUIWorkspace
Dim db As NotesDatabase
Dim existingdb As NotesDatabase
Dim archivedb As NotesDatabase
Dim view As NotesView
Dim note As NotesDocument
Dim profile As NotesDocument
Dim archivedoc As NotesDocument
Dim doc As NotesUIDocument
Dim DocWasSaved As Integer
Dim DoNotClose As Variant
Dim ExistingServer As String
Dim ExistingPath As String
'++LotusScript Development Environment:2:2:Initialize:1:10
Sub Initialize
End Sub
'++LotusScript Development Environment:2:2:ProcessExistingArchiveDB:1:12
Sub ProcessExistingArchiveDB
an existing archive already exists and the user has choosen to create a new one
this function gets called on one of two occasions
either the document has a value in the tmpArchivePath field
or the user entered a server and path that has an existing database
we need to handle both cases
%END REM
End Sub
'++LotusScript Development Environment:2:2:ProcessNonExistingArchiveDB:1:8
Sub ProcessNonExistingArchiveDB
On Error Goto ProcessError
On Error 4005 Goto DbCreateError
'render the dialog box to get the location of the archive database
If (w.DialogBox("(ArchiveProfileDlg)",True,True,"Specify New Location")) Then
'see if the archive database exists
Set archivedb = New NotesDatabase(note.ArchiveServer(0),note.ArchivePath(0))
If (archivedb.IsOpen) Then
Msgbox "Database already exists. Enter a new location"
ProcessNonExistingArchiveDB
Else
Set archivedb = db.CreateCopy(note.ArchiveServer(0),note.ArchivePath(0))
archivedb.Title = db.Title & " (Archive)"
End If
Call doc.Reload
Call doc.Refresh
Else
note.ArchiveServer = ""
note.ArchivePath = ""
End If
Exit Sub
DbCreateError:
Select Case Msgbox("Error creating archive database. The server may be down or you don't have access to create new databases on the server. Click Yes to try a different location now or No to cancel.",36,"Error")
Case 6
ProcessNonExistingArchiveDb
End Select
Exit Sub
ProcessError:
Msgbox Error & " - (ProcessNonExistingArchiveDB)"
Exit Sub
End Sub
'++LotusScript Development Environment:2:2:ProcessArchiveDbExists:1:8
Sub ProcessArchiveDbExists
'this function gets called if a database already exists in the tmpArchiveServer field
'render the dialog box to get the location of the archive database
On Error 4005 Goto DbCreateError
If (w.DialogBox("(ProcessExistingDbDlg)",True,True,"Specify New Location")) Then
On Error Resume Next
'see if the archive database exists
Set archivedb = New NotesDatabase(note.ArchiveServer(0),note.ArchivePath(0))
If (archivedb.IsOpen) Then
Msgbox "Database already exists. Enter a new location"
ProcessArchiveDbExists
Else
Call CreateNewArchiveDB
archivedb.Title = db.Title & " (Archive)"
End If
Call doc.reload
Call doc.refresh
End If
Exit Sub
DbCreateError:
Select Case Msgbox("Error creating archive database. The server may be down or you don't have access to create new databases on the server. Click Yes to try a different location now or No to cancel.",36,"Error")
Case 6
ProcessNonExistingArchiveDb
End Select
Exit Sub
End Sub
'++LotusScript Development Environment:2:2:CreateNewArchiveDB:1:8
Sub CreateNewArchiveDB
On Error 4005 Goto DbCreateError
On Error Goto ProcessError
'first, create the archive database
Set archivedb = db.CreateCopy(note.ArchiveServer(0),note.ArchivePath(0))
'if the profile says to copy new documents, then copy them now
If (note.CopyOptions(0) = "1") Then
Set allDocs = existingdb.AllDocuments
For i = 1 To allDocs.Count
Set archivedoc = allDocs.GetNthDocument(i)
Call archivedoc.CopyToDatabase(archivedb)
Next
End If
'if the profile says we should delete the original archive database, then remove it
If (note.DeleteOptions(0) = "1") Then Call existingdb.Remove
Exit Sub
DbCreateError:
Select Case Msgbox("Error creating archive database. The server may be down or you don't have access to create new databases on the server. Click Yes to try a different location now or No to cancel.",36,"Error")
Case 6
ProcessNonExistingArchiveDb
End Select
Exit Sub
ProcessError:
Msgbox Error & " - (ProcessNonExistingArchiveDB)"
Exit Sub
End Sub
Archive Profile'++LotusScript Development Environment:2:5:(Options):0:66
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Queryclose(Source As Notesuidocument, Continue As Variant)
Declare Sub Querysave(Source As Notesuidocument, Continue As Variant)
Declare Sub Postopen(Source As Notesuidocument)
'++LotusScript Development Environment:2:5:(Declarations):0:2
'++LotusScript Development Environment:2:2:BindEvents:1:129
Private Sub BindEvents(Byval Objectname_ As String)
Static Source As NOTESUIDOCUMENT
Set Source = Bind(Objectname_)
On Event Queryclose From Source Call Queryclose
On Event Querysave From Source Call Querysave
On Event Postopen From Source Call Postopen
End Sub
'++LotusScript Development Environment:2:2:Queryclose:1:12
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
If (DocWasSaved = False) Or (profile Is Nothing) Or DoNotClose Then Exit Sub
ItemList = profile.Items
Forall n In ItemList
profile.RemoveItem(n.Name)
End Forall
note.CopyAllItems profile
profile.SaveOptions = "1"
profile.save True, True
End Sub
'++LotusScript Development Environment:2:2:Querysave:1:12
Sub Querysave(Source As Notesuidocument, Continue As Variant)
DocWasSaved = True
DoNotClose = False
If Not(profile Is Nothing) Then note.SaveOptions = "0"
If (note.ArchivePath(0) = "") Then Msgbox "You will need to specify a location of the archive database before you can archive documents.",16
source.Reload
source.RefreshHideFormulas
End Sub
'++LotusScript Development Environment:2:2:Postopen:1:12
Sub Postopen(Source As Notesuidocument)
'initialize global variables
Set note = source.Document
Set w = New NotesUIWorkspace
Set s = New NotesSession
Set db = s.CurrentDatabase
Set view = db.GetView("Archiving")
Set doc = source
'turn off auto reload to make processing faster
source.AutoReload = False
'if this is not a new doc, we don't need to continue
If Not (source.IsNewDoc) Then Exit Sub
'get the existing profile
key = "Archive Profile"
Set profile = view.GetDocumentByKey(key,False)
If profile Is Nothing Then
'an existing profile was not found
note.ProtectFromArchive = 1
note.ExcludeFromView = "D"
note.From = "Archiving"
note.Subject = "Archive Profile"
note.Categories = "(Archive)"
Call note.ReplaceItemValue("_ViewIcon", 11)
source.reload
Else
'copy the profile fields to this document
ItemList = note.Items
Forall n In ItemList
note.RemoveItem(n.Name)
End Forall
profile.CopyAllItems note
source.Reload
If source.EditMode Then source.Refresh
End If
DocWasSaved = False
End Sub
K ,`
Archive Profile
ArchiveExpired
Archive Expired documents | Yes
after
ExpiredLife
Number cannot be negative.{
3S4S6S11SExpiredLife
days
ArchiveInactive
Archive documents which have no activity | Yes
after
DocumentLife
Number cannot be negative.{
3S4S6S11SDocumentLife
days
ArchiveLog
Generate an Archive Log each time an archive occurs | Yes
IncludeDoclinks
Include document links | Yes
Archive Profile editors:
ProfileEditors
Archive Server:
ArchivePath
ArchiveServer
Local
ArchiveServer
3S4S9S10S12S14StmpArchiveServer
Archive Path:
ArchivePath
tmpArchivePath
Categori_ze
_Edit Document
Send Docu_ment
_Forward
Close
0S0E
Save Profile
0S0E
Specify Archive Location'++LotusScript Development Environment:2:5:(Options):0:66
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Click(Source As Button)
'++LotusScript Development Environment:2:5:(Declarations):0:2
'++LotusScript Development Environment:2:2:BindEvents:1:129
Private Sub BindEvents(Byval Objectname_ As String)
Static Source As BUTTON
Set Source = Bind(Objectname_)
On Event Click From Source Call Click
End Sub
'++LotusScript Development Environment:2:2:Click:1:12
Sub Click(Source As Button)
'see if an archive database already exists based upon some field values
Set existingdb = New NotesDatabase(ExistingServer,ExistingPath)
If (existingdb.IsOpen) Then
Select Case Msgbox("The database (" + Fullpath$ + ") already exists. To create a new database, select OK, otherwise click Cancel",33,"Database already exists")
Case IDOK: ProcessArchiveDBExists
End Select
Else
ProcessNonExistingArchiveDB
End If
Else
ProcessNonExistingArchiveDB
End If
End Sub
InstructionsF
(ArchiveInstructions)
2S4S
_Move to Folder...
_Remove from Folderr
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
DocLife
ArchiveDate
ObsoleteLife
$ManualArchivers_O
$TITLE
$INFO
$WINDOWTITLE
$Script
$$Script_O
$$ScriptName
$$FormScript
$$$FormScript_O
ExpiredLife
DocumentLife
$BODY
$ACTIONS
$SCRIPTOBJ_6
Times New Roman
(ArchiveInstructions)
Archive Profile Help
The Archive Profile allows you to specify which documents should be removed from the current database and stored in an archive database. This allows you to keep your discussion up-to-date with only the latest topics.
You can choose the following in your ArchiveProfile:
Archive expired documents
Choose this option if you wish to archive documents which have been marked as expired. Indicate the number of days to wait before the expired documents are archived.
Archive documents which have no activity
Choose this option if you wish to archive documents which have had no activity. Indicate the number of days to wait before the inactive documents are archived.
Generate an Archive Log each time an archive occurs
Choose this option if you wish to have an Archive Log created when documents are archived. You can also indicate if you would like document links to the archived documents included in the Archive Log.
Specify Archive Location:
Click on this button to specify the server and filename of the Archive database. The archive database is created for you based upon the values specified in the dialog box.
Categori_ze
_Edit Document
Send Docu_ment
_Forward
_Move To Folder...
_Remove From Folderm
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
$TITLE
$INFO
$$ScriptName
$BODY
$ACTIONS
$PublicAccess
Temporary Export Certificate
"Helvetica
Temporary Export Certificate'++LotusScript Development Environment:2:5:(Options):0:66
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Queryclose(Source As Notesuidocument, Continue As Variant)
'++LotusScript Development Environment:2:5:(Declarations):0:2
'++LotusScript Development Environment:2:2:BindEvents:1:129
Private Sub BindEvents(Byval Objectname_ As String)
Static Source As NOTESUIDOCUMENT
Set Source = Bind(Objectname_)
On Event Queryclose From Source Call Queryclose
End Sub
'++LotusScript Development Environment:2:2:Queryclose:1:12
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
, by checking this box, that I have complied with the requirements of U.S. export law, specifically, 22 CFR 123.27, pertaining to the "temporary" export of cryptographic products for "personal" use.
I certify that:
the use of the product identified above was solely for personal use and not for sales, demonstration or marketing purposes;
only one copy of the product identified above was exported and it remained in my possession (and was not sent separately) during this travel;
I did not travel to a country to which exports are prohibited (countries on which a "ban or embargo" has been
imposed
by the U.S. government or United Nations); and
I have no knowledge or reason to believe the products were copied, transferred, stolen, or compromised while abroad.
. .
. .
Explanation of law:
The Personal Use Exemption authorizes temporary export of cryptographic products for personal use by U.S.citizens and lawful permanent residents when travelling abroad. The exemption requires the traveller to keep certain records and report instances where the product was stolen or otherwise compromised. There are no other export related requirements such as export licenses or Shipper's Export Declarations.
Requirements:
- Use of the cryptographic items must be for personal use and not for sales, marketing, or demonstration purposes
- Only one copy of a cryptographic item may be exported (i.e. one phone, one laptop,etc.) and one copy each of cryptographic software to be used on simultaneously exported hardware.
- The Exemption cannot be used for travel to countries which have been identified as supporting terrorism or those under certain United Nations embargoes. These countries currently are Cuba, Iran, Iraq, Libya, North Korea, Sudan and Syria.
- The cryptographic products must be hand carried (may be included with accompanying baggage), not sent separately, and must be returned to the U.S. at the completion of the stay abroad. Upon request of a U.S. Customs officer, the exporter will submit the products for inspection.
- The exporter must keep records for five years from the date the trip commenced. The records must include the description of the handcarried cryptographic products; dates and countries visited; dates of leaving the U.S. and re-entry. The record is to contain a statement that all conditions of the Exemption as outlined above were met and that no products were stolen, transferred or otherwise compromised.
- The exporter also has a duty to report to the U.S. Department of State, Office of Defense Trade Controls, any loss, transfer, copy, or compromise of the product while abroad within 10 days of returning to the U.S. (If the exporter has a reason to know any of these events has occurred he or she should immediately inform the Department of State.)
tmpDisplayDate_PreviewTime/date memo was created or mailed.
Preview letterheads for new Memos and Replies in the list below.
When you find one you like, press Done.
LetterHeadChoices
Plain Text|StdNotesLtr0Bouncy Earth|StdNotesLtr1Buck Rogers Mail|StdNotesLtr2Centered and Bold|StdNotesLtr3Decco|StdNotesLtr4Falling Spheres|StdNotesLtr5First Initial|StdNotesLtr6Frank Lloyd|StdNotesLtr7From The Desk|StdNotesLtr8Gateway|StdNotesLtrGatewayGeometry |StdNotesLtr9Gray Gradient with Lines|StdNotesLtr13Green and Yellow Diamond|StdNotesLtr14Marquee|StdNotesLtr34Metal Plate|StdNotesLtr15Pencil and Grid|StdNotesLtr16Pony Express|StdNotesLtr17Purple Geometry|StdNotesLtr18Reversed Teal|StdNotesLtr20Slashed Lines with Globe|StdNotesLtr21Squiggle with Backdrop|StdNotesLtr22Squiggly Line|StdNotesLtr23Tacks|StdNotesLtr24Tape|StdNotesLtr25Teal and Yellow Lines|StdNotesLtr26Three Dimensional Relief|StdNotesLtr27Torn Paper|StdNotesLtr28Triangle with Dots 1|StdNotesLtr29Triangle with Dots 2|StdNotesLtr30Wild Confetti|StdNotesLtr32Yellow Gradient|StdNotesLtr33
DefaultLogo
0S0E
Categori_ze
_Edit Document
Send Docu_ment
_Forward
_Move To Folder...
_Remove From Foldert
Choose New Letter Head
DefaultLogo
DefaultLogo
1S2S
Logos
0RR1S2S
The following list should be translated. It is presented to user in list box
0R1S
LogoNames
Three
Buck Rogers
Centered Rich
Confetti
Falling Balls
Frank Lloyde
0R1S2S
Select a Letterhead
Select the Letterhead which will appear at the top of all new Memos and Replys
DefaultLogo
Logos
LogoNames
LogoNames
0R1S2S14S16S19S
DefaultLogo
LogoNames
Logos
0RR4S8S10S
preview
Done
0S0E
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
$TITLE
$INFO
$WINDOWTITLE
$$Script_O
$$ScriptName
$$FormScript
$BODY
$ACTIONS
&Arial Narrow
&Arial
StdNotesLtrGateway
Hidden:
tmpDisplayDate_Preview
tmpDate
tmpDisplayFrom_Preview
on "
tmpDisplayDate_Preview
D0S2V
3S4S5S6S10StmpFrom
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
$TITLE
$INFO
$$Script_O
$$ScriptName
$BODY
Times New Roman
About Mail
@ @@ @` @
@@ @@@@@`@@
`@ `@@`@``@
The Mail template is used to create a database to send and receive electronic mail using Notes. The template can be used to create a mail database either on a local workstation or on a server.
The Mail template also contains Calendaring and Scheduling features which can be used for personal time management, meeting and appointment scheduling, or to delegate work to other people. The Calendar View provides a desktop calendar for ease in viewing scheduled appointments.
Please consult Help/Help Topics for more information on how to use the features of the Mail template.
'++LotusScript Development Environment:2:5:(Options):0:74
Option Public
Use "NoticeProcessing"
Use "NoticeResponses"
Use "RepeatProcessing"
Use "DocumentConversions"
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Postopen(Source As Notesuidocument)
Declare Sub Querysave(Source As Notesuidocument, Continue As Variant)
Declare Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
Declare Sub Postmodechange(Source As Notesuidocument)
Declare Sub Queryclose(Source As Notesuidocument, Continue As Variant)
Declare Sub Click(Source As Button)
'++LotusScript Development Environment:2:5:(Declarations):0:10
Dim collection As NotesDocumentCollection
Dim nam As NotesName
Dim DocWasSaved As Integer
Dim NewForm As String
Dim ErrorStatus As Integer
'++LotusScript Development Environment:2:2:Postopen:1:8
Sub Postopen(Source As Notesuidocument)
End Sub
'++LotusScript Development Environment:2:2:Querysave:1:8
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Call MarkTempFields(note)
Select Case note.tmpAction(0)
Case "Accept","PencilIn"
AcceptInvitation
Case "Decline"
DeclineInvitation
Case "Delegate"
ErrorStatus = DelegateInvitation
Case "CounterPropose"
CounterPropose
Case "AddCalendar"
'in this case, we treat this as an accept, but we do not return anything back to the Chair -> we only add this to the Calendar and Busytime
Call UpdateOriginalInvitation(note)
If (profile.AutoRemoveFromInbox(0) = "1") Then note.RemoveFromFolder("($Inbox)")
Case "AcceptCounterProposal"
AcceptCounterProposal
Case "DeclineCounterProposal"
DeclineCounterProposal
End Select
'#############################
'If this should repeat then we need create the repeat instances
Action = note.tmpAction(0)
If note.HasItem("OrgRepeat") Then Call RepeatSave
'#############################
source.Reload
End Sub
'++LotusScript Development Environment:2:2:Queryopen:1:8
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
On Error 4005 Resume Next 'we want to trap whenever the parentnote is nothing
'notice documents always exist when opening them
Set ws = New NotesUIWorkspace
Set uidoc = Source
InstantiateObjectVariables
note.RemoveItem("MailOptions")
'if the user is in the preview pane, exit
If (uidoc.InPreviewPane) Then Exit Sub
'if this is a response document, get the parent
'we do this for both the chair and the invitee so we can detect missing parent documents
If (note.IsResponse) Then
Set parentnote = db.GetDocumentByUNID(note.ParentDocumentUNID)
If (parentnote Is Nothing) Then
'if this is a non-repeating note, see if we should re-create the document
If Not(note.hasitem("OrgRepeat")) Then
If (Msgbox("The appointment document has been deleted from your calendar, do you want to re-create it?",52) = 6) Then
Call ResurrectParentDoc
Else
note.tmpNoParent = True
note.DoNotProcess = True
End If
Else
Msgbox "This deleted appointment was part of a repeat set but is being recreated as a single appointment.",48
Call ResurrectParentDoc
End If
End If
End If
'remove any sendto items
note.RemoveItem "SendTo"
note.tmpOwner = Owner
'get any update items if we are not the chair
If Not (note.tmpOwner(0) = note.Chair(0)) Then CheckForNoticeUpdates
End Sub
'++LotusScript Development Environment:2:2:Postmodechange:1:8
Sub Postmodechange(Source As Notesuidocument)
End Sub
'++LotusScript Development Environment:2:2:Queryclose:1:8
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
If (ErrorStatus > 0) Then
continue = False
ErrorStatus = 0
End If
If ((Action = "Accept") Or (Action = "AddCalendar")) And note.HasItem("RepeatFor") Then note.Subject = "Repeat parent for " & note.Subject(0) & " - do not delete"
ws.ViewRefresh
End Sub
'++LotusScript Development Environment:2:2:Click:1:8
Sub Click(Source As Button)
Call ResurrectParentDoc
Call note.RemoveItem("tmpNoParent")
Call note.RemoveItem("DoNotProcess")
Call uidoc.Refresh
End Sub
K| -t
%K| S
K| Qp
K| Sp
Notice'++LotusScript Development Environment:2:5:(Options):0:66
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
Declare Sub Querysave(Source As Notesuidocument, Continue As Variant)
Declare Sub Queryclose(Source As Notesuidocument, Continue As Variant)
Declare Sub Postopen(Source As Notesuidocument)
Declare Sub Postrecalc(Source As Notesuidocument)
'++LotusScript Development Environment:2:5:(Declarations):0:2
'++LotusScript Development Environment:2:2:BindEvents:1:129
Private Sub BindEvents(Byval Objectname_ As String)
Static Source As NOTESUIDOCUMENT
Set Source = Bind(Objectname_)
On Event Queryopen From Source Call Queryopen
On Event Querysave From Source Call Querysave
On Event Queryclose From Source Call Queryclose
On Event Postopen From Source Call Postopen
On Event Postrecalc From Source Call Postrecalc
End Sub
'++LotusScript Development Environment:2:2:Queryopen:1:12
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
On Error 4005 Resume Next 'we want to trap whenever the parentnote is nothing
'notice documents always exist when opening them
Set ws = New NotesUIWorkspace
Set uidoc = Source
InstantiateObjectVariables
note.RemoveItem("MailOptions")
'if the user is in the preview pane, exit
If (uidoc.InPreviewPane) Then Exit Sub
'if this is a response document, get the parent
'we do this for both the chair and the invitee so we can detect missing parent documents
If (note.IsResponse) Then
Call GetParentDocument
'if the user did not create a parent, exit sub
If (parentnote Is Nothing) Then Exit Sub
End If
If Not(parentnote Is Nothing) Then
If(note.HasItem("RescheduleWhich")) Then parentnote.RescheduleWhich = note.RescheduleWhich
If(note.HasItem("OriginalStartDate")) Then parentnote.OriginalStartDate = note.OriginalStartDate
End If
'remove any sendto items
note.RemoveItem "SendTo"
note.tmpOwner = Owner
'get any update items if we are not the chair
If Not (note.tmpOwner(0) = note.Chair(0)) Then CheckForNoticeUpdates
End Sub
'++LotusScript Development Environment:2:2:Querysave:1:12
Sub Querysave(Source As Notesuidocument, Continue As Variant)
ErrorStatus = 0
'if we had to open the repeat parent, then make sure the user actually processsed the parent
If (OpenRepeatParent) Then
If Not(GetParentDocument()) Then
continue = False
Exit Sub
End If
End If
'if the user had delegated the meeting invitation and is now trying to take a different action ,warn them
If (note.NoticeType(0) = ORS_MSGTYPE_DELEGATING) Or (note.HasItem("tmpDidDelegate")) Then
Select Case note.tmpAction(0)
Case "Accept","PencilIn","Decline","CounterPropose"
Set nam = New NotesName(note.Delegee(0))
If (Messagebox("You previously delegated this invitation to "& nam.Common & ". By taking a different action now, the delegee will no longer receive any notifications relevant to this meeting. " _
& "You may also have missed important change notifications (reschedule, cancellation) that were sent to the delegee by the Chairperson. Continue?",36,"Warning") = 7) Then
note.NoticeType = ORS_MSGTYPE_DELEGATING
note.RemoveItem("tmpDidDelegate")
note.RemoveItem("tmpUserActions")
source.Reload
source.Refresh
ErrorStatus = 1
continue = False
Exit Sub
End If
End Select
End If
If note.HasItem("OrgRepeat") Then Call SaveOriginalValues
If(note.NoticeType(0) = ORS_MSGTYPE_RESCHEDULE) Then
If (note.SequenceNum(0) <= parentnote.sequencenum(0)) Then
Messagebox "This reschedule notice cannot be processed since it has a lower sequence than the parent document."
continue = False
ErrorStatus = 1
Exit Sub
End If
End If
DocWasSaved = True
source.Reload
End Sub
'++LotusScript Development Environment:2:2:Queryclose:1:12
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
If Not(DocWasSaved) Then Exit Sub
Select Case note.tmpAction(0)
Case "Accept","PencilIn"
AcceptInvitation
Case "Decline"
DeclineInvitation
Case "Delegate"
ErrorStatus = DelegateInvitation
If (ErrorStatus <> 0) Then
note.RemoveItem "tmpUserActions"
note.RemoveItem "tmpAction"
continue = False
ErrorStatus = 0
Exit Sub
End If
Case "CounterPropose"
CounterPropose
Case "AddCalendar"
'in this case, we treat this as an accept, but we do not return anything back to the Chair -> we only add this to the Calendar and Busytime
Context = GetContext
Select Case Context
Case 1,3
Call UpdateOriginalInvitation(parentnote)
Case 2,4
Call UpdateOriginalInvitation(note)
End Select
If (profile.AutoRemoveFromInbox(0) = "1") Then note.RemoveFromFolder("($Inbox)")
Case "AcceptCounterProposal"
AcceptCounterProposal
Case "DeclineCounterProposal"
DeclineCounterProposal
End Select
'#############################
'If this should repeat then we need create the repeat instances
Action = note.tmpAction(0)
If (Action = "AddCalendar") Then Action = "Accept"
If note.HasItem("OrgRepeat") Then
If (note.NoticeType(0) = ORS_MSGTYPE_RESCHEDULE) Then Action = ""
Call RepeatSave
End If
'#############################
If (ErrorStatus > 0) Then
continue = False
ErrorStatus = 0
Exit Sub
End If
If ((Action = "Accept") Or (Action = "AddCalendar")) And note.HasItem("RepeatIds") Then note.Subject = "Do Not Delete - Repeat parent for " & note.Subject(0)
Call MarkTempFields(note)
Call note.Save(True,True,True)
ws.ViewRefresh
End Sub
'++LotusScript Development Environment:2:2:Postopen:1:12
Sub Postopen(Source As Notesuidocument)
If (OpenReschedule) Then
Set TmpNote = db.GetDocumentByUNID(UpdateResponses(0).misc2)
Call ws.EditDocument(False,TmpNote)
Elseif (OpenRepeatParent) Then
Call ws.editdocument(False,parentnote)
End If
DocWasSaved = False
End Sub
'++LotusScript Development Environment:2:2:Postrecalc:1:12
Sub Postrecalc(Source As Notesuidocument)
If (note.NoticeType(0) = ORS_MSGTYPE_COUNTER) Then
Set trdr = session.CreateDateRange
trdr.Text = uidoc.FieldGetText("NewTimeRange")
Set startdt = New NotesDateTime(uidoc.FieldGetText("Newdate") & " " & trdr.StartDateTime.TimeOnly)
Set enddt = New NotesDateTime(uidoc.FieldGetText("Newdate") & " " & trdr.EndDateTime.TimeOnly)
Recreate Appointment'++LotusScript Development Environment:2:5:(Options):0:66
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Click(Source As Button)
'++LotusScript Development Environment:2:5:(Declarations):0:2
'++LotusScript Development Environment:2:2:BindEvents:1:129
Private Sub BindEvents(Byval Objectname_ As String)
Static Source As BUTTON
Set Source = Bind(Objectname_)
On Event Click From Source Call Click
End Sub
'++LotusScript Development Environment:2:2:Click:1:12
Sub Click(Source As Button)
If (uidoc.EditMode = False) Then uidoc.EditMode = True
Call ResurrectParentDoc
Call note.RemoveItem("tmpNoParent")
' Call note.RemoveItem("DoNotProcess")
Call uidoc.Refresh
End Sub
tmpNoParent
0S0E
Categori_zeK
Send Docu_ment
_Remove From FolderK
Copy into\New Memo,
NewMemo
0S0E
tmpnewdoc
1S2S
Copy into\New Calendar Entry4
NewCalendarEntry
0S0E
tmpnewdoc
1S2S
Copy into\New Task,
NewTask
0S0E
tmpnewdoc
1S2S
Copy into\New GroupK,
NewGroup
0S0E
tmpnewdoc
1S2S
O=Lotus Notes
O=Lotus Notes
PURSAFO
|.:#U
O=Lotus Notes
CN=Lotus Notes Template Development/O=Lotus Notes
PURSAFO
Fde!f^^
StartDate
TimeRange
$FormPublicAccess
tmpStartDate
tmpEndDate
$TITLE
$INFO
$WINDOWTITLE
$Script
$$Script_O
$$ScriptName
$$FormScript
$$$FormScript_O
NewDate
NewTimeRange
tmpNewStart
tmpNewEnd
$BODY
$ACTIONS
$SCRIPTOBJ_4
$SCRIPTOBJ_5
$SCRIPTOBJ_6
$SCRIPTOBJ_11
$SCRIPTOBJ_14
$SCRIPTOBJ_15
$PublicAccess
New Calendar Entry
Subject
"Small Fonts
'++LotusScript Development Environment:2:5:(Options):0:74
Option Public
Use "AppointmentProcessing" 'includes NoticeProcessing and AppointmentResponses
Use "NoticeResponses"
Use "ResourceProcessing" 'includes RepeatProcessing
Use "DocumentConversions"
'++LotusScript Development Environment:2:5:(Forward):0:1
'++LotusScript Development Environment:2:5:(Declarations):0:10
'(Globals):
Dim startdt As NotesDateTime
Dim enddt As NotesDateTime
Dim remdt As NotesDateTime
Dim trdr As NotesDateRange
Dim Intl As NotesInternational
Dim tmpList() As Variant
Dim SelectedDate As Variant
Dim AppointmentAlarms As Integer
Dim AnniversaryAlarms As Integer
Dim EventAlarms As Integer
Dim DocWasSaved As Integer
Dim ErrorStatus As Integer
Dim AlarmSet As Integer
Dim InAlarmFolder As Integer
Appointment'++LotusScript Development Environment:2:5:(Options):0:66
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Postopen(Source As Notesuidocument)
Declare Sub Querysave(Source As Notesuidocument, Continue As Variant)
Declare Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
Declare Sub Queryclose(Source As Notesuidocument, Continue As Variant)
Declare Sub Postrecalc(Source As Notesuidocument)
Declare Sub Postmodechange(Source As Notesuidocument)
Declare Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
'++LotusScript Development Environment:2:5:(Declarations):0:2
'++LotusScript Development Environment:2:2:BindEvents:1:129
Private Sub BindEvents(Byval Objectname_ As String)
Static Source As NOTESUIDOCUMENT
Set Source = Bind(Objectname_)
On Event Postopen From Source Call Postopen
On Event Querysave From Source Call Querysave
On Event Queryopen From Source Call Queryopen
On Event Queryclose From Source Call Queryclose
On Event Postrecalc From Source Call Postrecalc
On Event Postmodechange From Source Call Postmodechange
On Event Querymodechange From Source Call Querymodechange
End Sub
'++LotusScript Development Environment:2:2:Postopen:1:12
Sub Postopen(Source As Notesuidocument)
If (source.InPreviewPane) Then Exit Sub
source.AutoReload = False
On Error Goto ErrorRoutine
'if the user wants to open the reschedule notice, go for it!
If (OpenReschedule) Then
Set note = db.GetDocumentByUNID(UpdateResponses(0).misc2)
' Call uidoc.Close
Set uidoc = ws.EditDocument(False,note)
End If
'if this is a new document we need to set up some defaults
If source.IsNewDoc Then
Set uidoc = source
Set note = uidoc.Document
Call GetCalendarOwner
If (note.AppointmentType(0) = "3") Then Call CreateInviteeTable(note)
Set trdr = session.CreateDateRange
If (Hour(SelectedDate) > 0) Then
'the user selected a date and time
note.StartDate = SelectedDate
note.StartDateTime = SelectedDate
PreferredDuration = profile.DefaultDuration(0)
Set enddt = New NotesDateTime(note.StartDateTime(0))
enddt.AdjustMinute(PreferredDuration)
Set note.EndDateTime = enddt
'set thet ime range value
Set trdr.StartDateTime = startdt
Set trdr.EndDateTime = enddt
Set note.TimeRange = trdr
Elseif (SelectedDate <> "") Then
'the user selected a date but now time
note.StartDate = SelectedDate
End If
note.ReminderTime = note.StartDateTime
note.From = session.UserName
note.Principal = Owner
note.ExcludeFromView = "D"
AlarmSet = 0
If (profile.EnableAlarms(0) = "1") And (profile.AutoSetAlarms(0) = "1") Then
Select Case note.AppointmentType(0)
Case "0","3"
If profile.SetAlarmAppointment(0) = "1" Then Call note.ReplaceItemValue("$Alarm", 1)
Case "1"
If profile.SetAlarmAnniversary(0) = "1" Then Call note.ReplaceItemValue("$Alarm", 1)
Case "2"
If profile.SetAlarmEvent(0) = "1" Then Call note.ReplaceItemValue("$Alarm", 1)
Case "4"
If (profile.SetAlarmReminder(0)) = "1" Then Call note.ReplaceItemValue("$Alarm",1)
End Select
End If
note.Chair = Owner
note.tmpOwner = Owner
If (profile.CalEntryType(0) = "1") Then note.BookFreeTime = "1"
'note.EndDateTime = note.StartDateTime
source.Reload
If (session.UserName = Owner) Then
source.RefreshHideFormulas
Else
source.refresh
End If
NewDocument = True
Else
'DO NOT SET NewDocument = FALSE
'In some cases, we set it to true in QueryOpen!!!
If source.InPreviewPane Then Exit Sub
If source.EditMode And note.HasItem("OrgRepeat") Then
If note.HasItem("RepeatIds") Then
source.EditMode = False
Else
Call SaveOriginalValues
End If
End If
End If
note.tmpApptFlags = note.AppointmentType
note.tmpOwner = Owner
DocWasSaved = False
Exit Sub
ErrorRoutine:
Messagebox Error & " (PostOpen)"
Exit Sub
End Sub
'++LotusScript Development Environment:2:2:Querysave:1:12
Sub Querysave(Source As Notesuidocument, Continue As Variant)
'refresh the document to get any updated values
ErrorStatus = 0
source.reload
source.refresh
'the first thing we do is make sure the document can be saved
'if the current user is not the owner, and the HideEntries is set, warn the user
If (db.CurrentAccessLevel < ACLLEVEL_AUTHOR) And (note.OrgConfidential(0) = "1") Then
Messagebox "You have indicated that you want this document hidden from public viewing, but since you are considered a public viewer, " & _
"you will not be able to save this document. This option will be de-selected.",0,"Warning"
note.OrgConfidential = ""
source.Reload
source.Refresh
End If
'if this is not a new document, and the originaltype was an invitation but no longer is, make sure they want to proceed
If Not(NewDocument) And (Owner = note.Chair(0))Then
If ((OriginalType = "3") And (note.AppointmentType(0) <> "3")) Then
If Messagebox("Changing this entry from an Invitation will cancel this meeting. Continue?",36,"Cancel Invitation") = 6 Then
If Not(note.IsResponse) Then
If (note.HasItem("PostedDate")) Then Call CancelAppointment
Else
If (parentnote.HasItem("PostedDate")) Then Call CancelAppointment
End If
Else
Continue = False
DocWasSaved = False
Exit Sub
End If
End If
End If
'see if we are creating a document in the past
If (Owner = note.Chair(0)) And ((note.AppointmentType(0) <> "1") And (note.AppointmentType(0) <> "2")) And (NewDocument) And Not(note.HasItem("RepeatFor")) Then
Set nowdt = New NotesDateTime("")
Call nowdt.SetNow
Set apptdt = New NotesDateTime(note.StartDateTime(0))
If nowdt.TimeDifference(apptdt) > 0 Then
If(Msgbox("This appointment is being created in the past. Continue?",36,"Continue") <> 6) Then
Continue = False
ErrorStatus = 2
DocWasSaved = False
Exit Sub
Else
ErrorStatus = 0
End If
End If
End If
'check for any conflicts if this is not a reminder and the Warn for Conflicts button is selected
If (note.OrgDontDoubleBook(0) = "1") And (note.BookFreeTime(0) <> "1") And Not(note.HasItem("RepeatFor")) Then
If Isarray(OriginalStartDate) Then
If (OriginalStartDate(0) <> note.StartDateTime(0)) Then
If (CheckIfConflictExists) Then
Continue = False
DocWasSaved = False
Exit Sub
End If
End If
Else
If (CheckIfConflictExists) Then
Continue = False
DocWasSaved = False
Exit Sub
End If
End If
End If
If (NewDocument) And (note.hasitem("RepeatFor")) And (note.AppointmentType(0) = "3") Then note.Broadcast = "1"
'if the invitee is modifying the date/time, see if they want to proceed
If (Owner <> note.Chair(0)) Then
If (OriginalStartDate(0) <> note.StartDateTime(0)) Or (OriginalEndDate(0) <> note.EndDateTime(0)) Then
If(Messagebox("You are not the originator of this entry. Are you sure you want to change the date/time?",36,"Warning") = 7) Then
'the user does not want to change the date/time
Set trdr = session.CreateDateRange
Set startdt = New NotesDateTime(OriginalStartDate(0))
Set enddt = New NotesDateTime(OriginalEndDate(0))
Set trdr.StartDateTime = startdt
Set trdr.EndDateTime = enddt
Set note.StartDate = startdt
Set note.StartDateTime = startdt
Set note.EndDateTime = enddt
Set note.TimeRange = trdr
source.Reload
source.Refresh
End If
End If
End If
On Error Goto ErrorRoutine
If note.HasItem("$Alarm") Then
If Not(note.HasItem("$AlarmOffset") Or note.HasItem("$AlarmTime")) Then
'they want it set automatically so default it as shown in calendar profile
If (AlarmDesc(0) = "") Then Call note.ReplaceItemValue("$AlarmDescription",note.Subject(0))
End If
Else
note.RemoveItem("$AlarmOffset")
note.RemoveItem("$AlarmTime")
note.RemoveItem("$AlarmDescription")
End If
If Not(note.HasItem("DocAuthors")) Then Set item = New NotesItem(note, "DocAuthors", note.From, AUTHORS)
'if this is a repeating meeting, see if changes need to be copied
If Not(NewDocument) And note.HasItem("OrgRepeat") Then
Call GetModifiedSettings
If (CancelChange) Then
continue = False
Exit Sub
End If
End If
DocWasSaved = True
source.Reload
Exit Sub
ErrorRoutine:
Messagebox Error & " (QuerySave)"
Exit Sub
End Sub
'++LotusScript Development Environment:2:2:Queryopen:1:12
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
'if this is a new document, get the currently selected time from the Calendar view
If IsNewDoc Then
Set ws = New NotesUIWorkspace
Set session = New NotesSession
Set db = session.CurrentDatabase
On Error Resume Next
Set profile = db.GetProfileDocument("CalendarProfile")
If Err > 0 Then
Err = 0
Messagebox "This mail file does not have a Calendar Profile. " &_
"Please ask the owner of this mail file to select Actions, Calendar Tools, Calendar Profile from the menu to create one.", 0, "Calendar Profile"
continue = False
Exit Sub
End If
If (profile.Owner(0) <> "") Then
If (db.CurrentAccessLevel < ACLLEVEL_AUTHOR) And (profile.CalEntryHide(0) = "1") Then
Set nam = New NotesName(profile.Owner(0))
Messagebox nam.Common & " has specified that new Calendar Entries are hidden from public viewing. You must have at least author access to create new Calendar Entries.",48,"Warning"
continue = False
Exit Sub
End If
End If
SelectedDate = ws.CurrentCalendarDateTime
Set startdt = New NotesDateTime(SelectedDate)
End If
'if this is a new document, then exit this routine
If Isnewdoc Or source.InPreviewPane Then Exit Sub
Set ws = New NotesUIWorkspace
Set uidoc = source
InstantiateObjectVariables
On Error Goto ErrorRoutine
On Error 4005 Resume Next 'this will handle the parentnote not being found
Set trdr = session.CreateDateRange
'see if this is a document being created from an existing one
If (note.HasItem("tmpNewDoc")) Then
NewDocument = True
Exit Sub
End If
If (note.HasItem("$Alarm")) Then
AlarmSet = 1
InAlarmFolder = True
End If
note.tmpOwner = Owner
If (note.IsResponse) Then
Set parentnote = db.GetDocumentByUNID(note.ParentDocumentUNID)
If (parentnote Is Nothing) Then
'this must be part of a repeat set -> we do not call GetParentDocument because that function is used to recreate the parent if it can't be found
'we do not need to create the parent document since this was part of a repeat set
If (note.HasItem("OrgRepeat")) Then
Messagebox "This calendar entry belonged to a repeat set. The parent document cannot be found so this entry will be converted to a non-repeating entry.",0,"Status"
note.RemoveItem("$REF")
note.RemoveItem("$REFOPTIONS")
note.RemoveItem("OrgRepeat")
Call note.Save(True,True,True)
End If
End If
End If
'we need to get the original start and end date times
OriginalStartDate = note.StartDateTime
OriginalEndDate = note.EndDateTime
OriginalType = note.AppointmentType(0)
If (note.AppointmentType(0) <> "3") Then Exit Sub
'get any update items if we are not the chair
If Not (note.tmpOwner(0) = note.Chair(0)) Then
Call note.RemoveItem("MailOptions")
Call note.RemoveItem("SendTo")
CheckForNoticeUpdates
note.SendTo = ""
Else
'we are the chair
If (note.IsResponse) Then
'this is a repeat instance; we need to add our parent's required & optional attendees
OriginalRequired = parentnote.RequiredAttendees
OriginalOptional = parentnote.OptionalAttendees
OriginalRoom = parentnote.Room(0)
Call CreateInviteeTable(parentnote)
Else
OriginalRequired = note.RequiredAttendees
OriginalOptional = note.OptionalAttendees
OriginalRoom = note.Room(0)
Call CreateInviteeTable(note)
End If
End If
Print Now
Exit Sub
ErrorRoutine:
Messagebox Error & " (QueryOpen)"
Exit Sub
End Sub
'++LotusScript Development Environment:2:2:Queryclose:1:12
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
Dim InstanceWarned As Integer
'if the document is in read mode, was not saved, or is a conflict, bail
If source.EditMode = False Or DocWasSaved = False Then Exit Sub
'we need to make this check here -> if the user is in preview pane, the note object would not be set
If note.HasItem("$Conflict") Then Exit Sub
'if this is a parent document, check for PostedDate
If Not(NewDocument) Then
If (note.AppointmentType(0) = "3") Then
If (OriginalStartDate(0) <> note.StartDateTime(0)) Or (OriginalEndDate(0) <> note.EndDateTime(0)) Then
IsDateChange = True
Else
IsDateChange = False
End If
'see if the room has changed
If (OriginalRoom <> note.Room(0)) And (OriginalRoom <> "") Then
IsRoomChange = True
note.OriginalRoom = OriginalRoom
Else
IsRoomChange = False
End If
If (IsDateChange Or IsRoomChange) And (note.chair(0) = owner) Then
If (note.IsResponse) Then
If (parentnote.HasItem("PostedDate") Or (note.RequiredResources(0) <> "") Or (note.RoomRequired(0) = "1" And note.Room(0) <> "")) Then NeedsReschedule = True
Else
If (note.HasItem("PostedDate")) Or (note.RequiredResources(0) <> "") Or (note.RoomRequired(0) = "1" And note.Room(0) <> "") Then NeedsReschedule = True
End If
End If
End If
End If
If (NeedsReschedule) Then note.SequenceNum = note.SequenceNum(0) + 1
'If they have not indicated that this should repeat then we don't need to do this stuff
'If they have not indicated that this should repeat then we don't need to do this stuff
If note.HasItem("OrgRepeat") And (note.tmpAction(0) <> "Confirm") Then
Action = note.tmpAction(0)
Call RepeatSave
End If
If (NeedsReschedule) Then Call RescheduleAppointment
Select Case note.tmpAction(0)
Case "Confirm"
ConfirmAppointment
Case "Cancel"
CancelAppointment
Case "Decline"
'this gets called if an invitee changes their mind
DeclineInvitation
Case "Delegate"
'the invitee is delegating a meeting that has been accepted
DelegateInvitation
End Select
On Error Goto ErrorRoutine
If note.HasItem("$Alarm") Then
ws.EnableAlarms(True)
If Not(note.HasItem("$AlarmOffset") Or note.HasItem("$AlarmTime")) Then
'they want it set automatically so default it as shown in calendar profile
If (AlarmDesc(0) = "") Then Call note.ReplaceItemValue("$AlarmDescription",note.Subject(0))
End If
'if the document is not in the Alarms folder, put it in there if it is not the parent document of a repeat set
If Not(InAlarmFolder) Then
If Not(note.HasItem("RepeatDates")) Then
If (note.noteid = "0") Then Call note.Save(True,True,True)
Call note.PutInFolder("$Alarms")
End If
Else
'the document is in the alarms folder, but if the times changed, then we need to add it back in if it is not the parent document of a repeat set
'we only need to check startdate time, regardless of appointment type since the alarm is based upon the start date time
If(OriginalStartDate(0) <> note.StartDateTime(0)) And Not(note.HasItem("RepeatIds"))Then Call note.PutInFolder("$Alarms")
End If
ws.CheckAlarms
End If
'check to see if this is a repeating entry and the repeat documents were not created
If (NewDocument) And (note.HasItem("OrgRepeat")) And Not(note.HasItem("RepeatIds")) Then Call RepeatSave
'see if we should invite the users/resources to this meeting
If (note.AppointmentType(0) = "3") And (note.Chair(0) = Owner) And (ErrorStatus = 0) Then
If (note.Resources(0) <> "") Or (note.SendTo(0) <> "") Or (note.CopyTo(0) <> "") Or (note.RoomRequired(0) = "1" And note.RoomToReserve(0) <> "" And OriginalRoom = "") Then
If Messagebox("Do you want to send this to the people/resources you invited?", 4 + 32, "Close") = 6 Then
'the user wants to send this out
'first, invite users
If (note.SendTo(0) <> "") Or (note.CopyTo(0) <> "") Then
If note.HasItem("Body") Then
ErrorStatus = SendInvitation
If (errorstatus > 0) Then
continue = False
ErrorStatus = 0
Exit Sub
End If
Else
ErrorStatus = SendInvitation
If (errorstatus > 0) Then
continue = False
ErrorStatus = 0
Exit Sub
End If
End If
If (note.HasItem("OrgRepeat")) And (note.IsResponse) And (ChangeWhich <> "0") Then
Messagebox "The people/resources invited will be for this repeat instance only.",0,"Status"
InstanceWarned =True
End If
End If
'invite any resources -> resources are on a per repeat instance basis, so we only invite resources for this meeting
If (note.Resources(0) <> "") Then
Call InviteResources(note)
If (note.HasItem("OrgRepeat")) And (note.IsResponse) And (ChangeWhich <> "0") And Not(InstanceWarned) Then Messagebox "The people/resources invited will be for this repeat instance only.",0,"Status"
End If
'invite the room -> the user can change the room for multiple repeat instances
If (note.RoomRequired(0) = "1") And (note.RoomToReserve(0) <> "") Then
If note.HasItem("RepeatFor") And (NewDocument) Then
note.Subject = "Do Not Delete - Repeat parent for " & note.Subject(0)
End If
If note.HasItem("OrgRepeat") And Not(note.IsResponse) Then note.RemoveItem("CalendarDateTime")
Call MarkTempFields(note)
Call note.Save(True,True,True)
If (note.tmpAction(0) = "CounterPropose") Then
note.NoticeType = ORS_MSGTYPE_COUNTER
note.Form = "Notice"
Call uidoc.Reload
noteunid = note.UniversalID
Set note = db.GetDocumentByUNID(noteunid)
Set uidoc = ws.EditDocument(True,note)
End If
' If notice Is Nothing Then
'Call MarkTempFields
'note.Save True,True
ws.ViewRefresh
' Exit Sub
' End If
%REM
If notice.NoticeType(0) = ORS_MSGTYPE_RESCHEDULE Or _
notice.NoticeType(0) = ORS_MSGTYPE_CONFIRMATION Or _
notice.NoticeType(0) = ORS_MSGTYPE_CANCEL Or _
notice.NoticeType(0) = ORS_MSGTYPE_STATUSUPDATE Then
note.OriginalAttendees = OriginalAttendees
'Call SendUpdateNotice
End If
%ENDREM
Exit Sub
ErrorRoutine:
Messagebox Error & " (QueryClose)"
Exit Sub
End Sub
'++LotusScript Development Environment:2:2:Postrecalc:1:12
Sub Postrecalc(Source As Notesuidocument)
Dim startitem As NotesItem
Dim enditem As NotesItem
If Not (source.EditMode) Then Exit Sub
On Error Goto ErrorRoutine
'if the user is attempting to change the appointment type of a repeating meeting, don't let them
If Not(NewDocument) And (note.HasItem("OrgRepeat")) And (note.IsResponse) And (OriginalType <> note.AppointmentType(0)) Then note.AppointmentType = OriginalType
'if there is no chair item and there should be, add it
If Not(note.HasItem("Chair")) Then note.Chair = Owner
'if the user is changing this from a non-invitation to an invitation, we need to set up the invitee objects
If (note.AppointmentType(0) = "3" And OriginalType <> "3") And (note.Chair(0) = Owner) Then Call CreateInviteeTable(note)
'First see if we have alarm set by default for this type and the new type doesn't have default alarm specified in Calendar Profile
If AlarmSet = 0 And note.HasItem("$Alarm") Then
Call note.RemoveItem("$Alarm")
End If
'If $Alarm is not set and $AlarmOffset is not, we check if it should be
'(they would both be set if the user set the alarm manually)
If Not(note.HasItem("$Alarm")) And Not(note.HasItem("$AlarmOffset") Or note.HasItem("$AlarmTime")) And (note.tmpAlarmOff(0) <> "1") And (profile.EnableAlarms(0) = "1") And (profile.AutoSetAlarms(0) = "1") Then
Select Case note.AppointmentType(0)
Case "0","3"
If profile.SetAlarmAppointment(0) = "1" Then Call note.ReplaceItemValue("$Alarm", 1)
Case "1"
If profile.SetAlarmAnniversary(0) = "1" Then Call note.ReplaceItemValue("$Alarm", 1)
Case "2"
If profile.SetAlarmEvent(0) = "1" Then Call note.ReplaceItemValue("$Alarm", 1)
Case "4"
If (profile.SetAlarmReminder(0)) = "1" Then Call note.ReplaceItemValue("$Alarm",1)
End Select
End If
'tmpFreeTime is set when you click the FreeTime action
Select Case note.tmpFreeTime(0)
'The first time through, we are only setting the Attendee list so that the FreeTime dialog can use it
Case "0"
OriginalTimeRange = note.TimeRange
note.tmpFreeTime = "1"
'we need to get the actual text from the time control since LotusScript date/time objects don't work as well as Notes objects
trdr.Text = uidoc.FieldGetText("TimeRange")
Set startdt = New NotesDatetime(uidoc.FieldGetText("StartDate") & " " & trdr.StartDateTime.TimeOnly)
Set enddt = New NotesDateTime(uidoc.FieldGetText("StartDate") & " " & trdr.EndDateTime.TimeOnly)
Set note.StartDateTime = startdt
Set note.EndDateTime = enddt
note.StartDate = note.StartDateTime
'The second time through, we are recalcing TimeRange from StartDateTime and EndDateTime
Case "1"
note.RemoveItem("tmpFreeTime")
Set startitem = note.GetFirstItem("StartDateTime")
Set enditem = note.GetFirstItem("EndDateTime")
Set note.StartDate = startitem.DateTimeValue
Set trdr.StartDateTime = startitem.DateTimeValue
Set trdr.EndDateTime = enditem.DateTimeValue
Set note.TimeRange = trdr
'otherwise we are recalcing based on what is on the screen
Case Else
If (note.AppointmentType(0) = "0") Or (note.AppointmentType(0) = "3") Then
'this is a personal appointment or a meeting
trdr.Text = uidoc.FieldGetText("TimeRange")
Set startdt = New NotesDatetime(uidoc.FieldGetText("StartDate") & " " & trdr.StartDateTime.TimeOnly)
Set enddt = New NotesDateTime(uidoc.FieldGetText("StartDate") & " " & trdr.EndDateTime.TimeOnly)
BlindCopyToList of undisclosed people to send copies of memo.
Subject:
ReplyText
MailStEd|
1S2S
Prefix
ReplyText
0R1S2S8S9S11S13S
Prefix
ReplyText
Subject
Topic
Subject
0R1S2S5S6S8S10S11S12S14S16S
Prefix
Subj"
0R10S12S16S17S19S21S22S23S
Subject
0S0E
SubjectSubject of memo.
Subject:
Subject
tmpDisplaySubjectSubject of memo.
0S0E
tmpDisplayLink
$HideMailHeader
Moods
PostedDate
SenderTag
Moods
7S9S11S13S14S15S16S17S19S20S21S22S25S27S
Edit Document
ForwardK
0S0E
New Memo.
0S0E
Delete
0S0E
_Move To Folder...
Delivery Information...Kz
DeliveryInfo
Delivery Information
4S5S6S7S8S9S10S12S
_Forward
Reply
Reply
0S0E
Reply With History
Reply with History
This document is truncated.
4S8S10S13S
Reply with history
Address...
0S0E
PostedDateh
5S6S7S8S
Close
0S0E
PostedDateY
0S0E
Reply To All
Owner
CalendarProfile
Owner
1S2S6S
CanonicalName
Owner
Owner
0R1S2S6S9S10S12S14S
Names
InheritedSendTo
0R1S2S
Try 4 different ways of removing the current sender from the new recipient list
0RR1S
Names1 compares the original names list with the canonical name plus the domain name and if found replaces with a null - works
0R1S
Names1
Names
CanonicalName
Names
CanonicalName
0R1S2S6S7S8S15S21S
Names 2 compares just the common name of the current user plus the domain against the result of Names 1 and replaces with null - appears to work
0RR1S
Names2
Names1
CanonicalName
Names1b
CanonicalName
0R1S2S6S10S12S13S20S26S31S
Names3 compares the canonical names against the Names 2 list and replaces with a null.
0RR1S
Names3
Names2
CanonicalName
Names 4 compares the common name only - no domain and if found replaces with null. Also makes sure there are no duplicates or extra spaces.
0RR1S
Names4
Names3
CanonicalName
0R1S2S10S14S17S
Names4
0R3S4S6S11S
Append the InheritedFromDomain to all entries which are left and let the @OptimizeMailAddress take care of duplicates. This ensures that mail will route the way that the message came in which lessens the chance of delivery failures...
0RR1S
Names4a
Names4
InheritedFromDomain
0R1S2S
Look for all addresses whose last domain is the same as the sender's domain - tack on the whole FromDomain
0RR1S
Names5
Names4a
Names4a
InheritedFromDomain
Names4a
InheritedFromDomain
0R1S2S6S10S12S13S14S15S21S25S29S31S32S33S34S
Find all the addresses without a domain and attach FromDomain
0RR1S
Names6
Names5
Names5
Names5
0R1S2S6S10S12S13S14S15S19S22S
Names7
Names5
Names6
Names6
InheritedFromDomain
0R1S2S6S8S9S10S11S12S
Find everyone whose domain is the same as yours and strip it off
BlindCopyToList of undisclosed people to send copies of memo.
Subject:
Subject
Topic
Subject
1S2S5S6S8S10S
Subj"
0R10S12S16S17S19S21S22S23S
Subject
0S0E
SubjectSubject of memo.
Subject:
Subject
tmpDisplaySubjectSubject of memo.
0S0E
tmpDisplayLink
$HideMailHeader
Moods
PostedDate
SenderTag
Moods
7S9S11S13S14S15S16S17S19S20S21S22S25S27S
Edit Document
ForwardK
0S0E
New Memo.
0S0E
Delete
0S0E
_Move To Folder...
Delivery Information...Kz
DeliveryInfo
Delivery Information
4S5S6S7S8S9S10S12S
_Forward
Reply
Reply
0S0E
Reply With History
Reply with History
This document is truncated.
4S8S10S13S
Reply with history
Address...
0S0E
PostedDateh
5S6S7S8S
Close
0S0E
PostedDateY
0S0E
Reply To All
Owner
CalendarProfile
Owner
1S2S6S
CanonicalName
Owner
Owner
0R1S2S6S9S10S12S14S
Names
InheritedSendTo
0R1S2S
Try 4 different ways of removing the current sender from the new recipient list
0RR1S
Names1 compares the original names list with the canonical name plus the domain name and if found replaces with a null - works
0R1S
Names1
Names
CanonicalName
Names
CanonicalName
0R1S2S6S7S8S15S21S
Names 2 compares just the common name of the current user plus the domain against the result of Names 1 and replaces with null - appears to work
0RR1S
Names2
Names1
CanonicalName
Names1b
CanonicalName
0R1S2S6S10S12S13S20S26S31S
Names3 compares the canonical names against the Names 2 list and replaces with a null.
0RR1S
Names3
Names2
CanonicalName
Names 4 compares the common name only - no domain and if found replaces with null. Also makes sure there are no duplicates or extra spaces.
0RR1S
Names4
Names3
CanonicalName
0R1S2S10S14S17S
Names4
0R3S4S6S11S
Append the InheritedFromDomain to all entries which are left and let the @OptimizeMailAddress take care of duplicates. This ensures that mail will route the way that the message came in which lessens the chance of delivery failures...
0RR1S
Names4a
Names4
InheritedFromDomain
0R1S2S
Look for all addresses whose last domain is the same as the sender's domain - tack on the whole FromDomain
0RR1S
Names5
Names4a
Names4a
InheritedFromDomain
Names4a
InheritedFromDomain
0R1S2S6S10S12S13S14S15S21S25S29S31S32S33S34S
Find all the addresses without a domain and attach FromDomain
0RR1S
Names6
Names5
Names5
Names5
0R1S2S6S10S12S13S14S15S19S22S
Names7
Names5
Names6
Names6
InheritedFromDomain
0R1S2S6S8S9S10S11S12S
Find everyone whose domain is the same as yours and strip it off
Copy into\New Memo'++LotusScript Development Environment:2:5:(Options):0:66
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Click(Source As Button)
'++LotusScript Development Environment:2:5:(Declarations):0:2
'++LotusScript Development Environment:2:2:BindEvents:1:129
Private Sub BindEvents(Byval Objectname_ As String)
Static Source As BUTTON
Set Source = Bind(Objectname_)
On Event Click From Source Call Click
End Sub
'++LotusScript Development Environment:2:2:Click:1:12
Sub Click(Source As Button)
Call CreateNewDoc(NEW_MEMO)
End Sub
Copy into\New Calendar Entry'++LotusScript Development Environment:2:5:(Options):0:66
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Click(Source As Button)
'++LotusScript Development Environment:2:5:(Declarations):0:2
'++LotusScript Development Environment:2:2:BindEvents:1:129
Private Sub BindEvents(Byval Objectname_ As String)
Static Source As BUTTON
Set Source = Bind(Objectname_)
On Event Click From Source Call Click
End Sub
'++LotusScript Development Environment:2:2:Click:1:12
Sub Click(Source As Button)
Call CreateNewDoc(NEW_CALENDAR)
End Sub
tmpnewdoc
1S2S
Copy into\New Task'++LotusScript Development Environment:2:5:(Options):0:66
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Click(Source As Button)
'++LotusScript Development Environment:2:5:(Declarations):0:2
'++LotusScript Development Environment:2:2:BindEvents:1:129
Private Sub BindEvents(Byval Objectname_ As String)
Static Source As BUTTON
Set Source = Bind(Objectname_)
On Event Click From Source Call Click
End Sub
'++LotusScript Development Environment:2:2:Click:1:12
Sub Click(Source As Button)
Call CreateNewDoc(NEW_TASK)
End Sub
tmpnewdoc
1S2S
Copy into\New GroupK,
NewGroup
0S0E
tmpnewdoc
1S2S
'++LotusScript Development Environment:2:5:(Options):0:74
Option Public
Use "AppointmentProcessing"
Use "RepeatProcessing"
Use "DocumentConversions"
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub PutTask
Declare Sub SetViewObjectVariables(source)
Declare Sub PutCalendarEntry(Action)
Declare Sub PutAppointment(Action)
'++LotusScript Development Environment:2:5:(Declarations):0:10
Dim uiview As NotesUIView
Dim startdt As NotesDateTime
Dim enddt As NotesDateTime
'++LotusScript Development Environment:2:2:PutTask:1:8
Sub PutTask
'This subroutine is used both for drag/dropping and for pasting
Dim timeitem As NotesItem
Dim timedt As New NotesDateTime("")
On Error Goto ErrorRoutine
Set timeitem = note.GetFirstItem("OriginalStartDate")
Set datedt = New NotesDateTime(uiview.CalendarDateTime)
Set timedt = timeitem.DateTimeValue
Set date2 = New NotesDateTime(datedt.DateOnly & " " & timedt.TimeOnly)
'date1 is the original CalendarDateTime and date2 is the new one
TotalDiff = date2.TimeDifference(date1)
'break the difference down to a number that fits in the integer datatype
DayDiff = Fix(TotalDiff / 86400)
SecDiff = TotalDiff Mod 86400
MinDiff = Fix(SecDiff / 60)
SecDiff = SecDiff Mod 60
'If you are changing the date
If (date1.LSLocalTime <> date2.LSLocalTime) Then
If note.StartDateTime(0) = "" Then
Set note.DueDateTime = date2
note.CalendarDateTime = note.DueDateTime
Elseif note.DueDateTime(0) = "" Then
Set note.StartDateTime = date2
note.CalendarDateTime = note.StartDateTime
Else
Set note.StartDateTime = date2
note.CalendarDateTime = note.StartDateTime
Set dateitem = New NotesDateTime(note.DueDateTime(0))
dateitem.AdjustDay(DayDiff)
dateitem.AdjustMinute(MinDiff)
dateitem.AdjustSecond(SecDiff)
Set note.DueDateTime = dateitem
End If
Call MarkTempFields(note)
Call note.Save(True, True, True)
End If
Exit Sub
ErrorRoutine:
Messagebox Error & " (PutTask)"
Exit Sub
End Sub
'++LotusScript Development Environment:2:2:SetViewObjectVariables:1:8
Sub SetViewObjectVariables(source)
Set uiview = source
Set session = New NotesSession
Set ws = New NotesUIWorkspace
Set db = session.CurrentDatabase
End Sub
'++LotusScript Development Environment:2:2:PutCalendarEntry:1:8
Sub PutCalendarEntry(Action)
'This subroutine is used both for drag/dropping and for pasting
On Error Goto ErrorRoutine
CheckAlarms = False
Set documents = uiview.documents
Set note = documents.GetFirstDocument
While Not(note Is Nothing)
note.OriginalStartDate = note.CalendarDateTime
Set date1 = New NotesDateTime(note.OriginalStartDate(0))
Select Case note.Form(0)
Case "Task"
PutTask
Case "Appointment"
PutAppointment(Action)
Case Else
'we only support this for Tasks and Appointments
End Select
Set note = documents.GetNextDocument(note)
Wend
If CheckAlarms Then ws.CheckAlarms
ws.ViewRefresh
%REM
'we need to de-reference these object variables, and we don't care if any of the delete's fail
On Error Resume Next
Delete documents
Delete parent
Delete note
Delete notice
Delete date1
Delete date2
%END REM
Exit Sub
ErrorRoutine:
Messagebox Error & " (PutCalendarEntry)"
Exit Sub
End Sub
'++LotusScript Development Environment:2:2:PutAppointment:1:8
Sub PutAppointment(Action)
Dim timeitem As NotesItem
Dim timedt As New NotesDateTime("")
On Error Goto ErrorRoutine
Set notice = New NotesDocument(db)
If Action = "Drop" And note.HasItem("OrgRepeat") Then Call SaveOriginalValues
If note.HasItem("$Alarm") Then CheckAlarms = True
'see if the document was dropped onto a date but no time, or if this is an anniverary/event
If (Hour(uiview.CalendarDateTime) = 0) Or (note.AppointmentType(0) = "1") Or (note.AppointmentType(0) = "2") Then
'since this was dropped on a date with no time, keep the same time
Set datedt = New NotesDateTime(uiview.CalendarDateTime)
Set timeitem = note.GetFirstItem("OriginalStartDate")
Set timedt = timeitem.DateTimeValue
Set date2 = New NotesDateTime(datedt.DateOnly & " " & timedt.TimeOnly)
Else
Set date2 = New NotesDateTime(uiview.CalendarDateTime)
End If
TotalDiff = date2.TimeDifference(date1)
'break the difference down to a number that fits in the integer datatype
DayDiff = Fix(TotalDiff / 86400)
SecDiff = TotalDiff Mod 86400
MinDiff = Fix(SecDiff / 60)
SecDiff = SecDiff Mod 60
'If you are changing the date
If (date1.LSLocalTime <> date2.LSLocalTime) Then
If (note.Chair(0) <> Owner) Then
'we are not the creator of this entry -> make sure the user wants to change the date/time of this meeting
If (Messagebox("You are not the originator of this entry (" & note.Subject(0) & "). Are you sure you want to change the date/time?",36,"Warning") = 6) Then
Set note.StartDateTime = date2
note.StartDate = Datevalue(note.StartDateTime(0))
note.CalendarDateTime = note.StartDateTime
Set dateitem = New NotesDateTime(note.EndDateTime(0))
dateitem.AdjustDay(DayDiff)
dateitem.AdjustMinute(MinDiff)
dateitem.AdjustSecond(SecDiff)
Set note.EndDateTime = dateitem
If note.HasItem("$AlarmTime") Then
AlarmTime = note.GetItemValue("$AlarmTime")
Set dateitem = New NotesDateTime(AlarmTime(0))
dateitem.AdjustDay(DayDiff)
dateitem.AdjustMinute(MinDiff)
dateitem.AdjustSecond(SecDiff)
Set item = note.GetFirstItem("$AlarmTime")
Set item.DateTimeValue = dateitem
End If
If (note.AppointmentType(0) = "4") Then
note.ReminderTime = note.StartDateTime(0)
Else
Set trdr = session.CreateDateRange
Set startdt = New NotesDateTime(note.StartDateTime(0))
Set enddt = New NotesDateTime(note.EndDateTime(0))
Set trdr.StartDateTime = startdt
Set trdr.EndDateTime = enddt
Set note.TimeRange = trdr
End If
If Action = "Drop" Then
If note.HasItem("OrgRepeat") Then Call RepeatSave
Elseif note.HasItem("OrgRepeat") Then
note.RemoveItem("OrgRepeat")
note.RemoveItem("$Ref")
Messagebox "Pasting an instance of a repeating appointment creates a non-repeating appointment.", 64, "Paste"
End If
If CancelChange = True Then Exit Sub
Call MarkTempFields(note)
Call note.Save(True, True, True)
End If
Else
'we are the originator of this meeting
Set note.StartDateTime = date2
Set note.StartDate = date2
note.CalendarDateTime = note.StartDateTime
Set dateitem = New NotesDateTime(note.EndDateTime(0))
dateitem.AdjustDay(DayDiff)
dateitem.AdjustMinute(MinDiff)
dateitem.AdjustSecond(SecDiff)
Set note.EndDateTime = dateitem
If note.HasItem("$AlarmTime") Then
AlarmTime = note.GetItemValue("$AlarmTime")
Set dateitem = New NotesDateTime(AlarmTime(0))
dateitem.AdjustDay(DayDiff)
dateitem.AdjustMinute(MinDiff)
dateitem.AdjustSecond(SecDiff)
Set item = note.GetFirstItem("$AlarmTime")
Set item.DateTimeValue = dateitem
End If
If (note.AppointmentType(0) = "4") Then
note.ReminderTime = note.StartDateTime(0)
Else
Set trdr = session.CreateDateRange
Set startdt = New NotesDateTime(note.StartDateTime(0))
Set enddt = New NotesDateTime(note.EndDateTime(0))
Set trdr.StartDateTime = date2
Set trdr.EndDateTime = dateitem
Set note.TimeRange = trdr
End If
'see if we need to reschedule the appointment
If (Not(note.IsResponse) And (note.HasItem("PostedDate"))) Or ((note.IsResponse) And (note.AppointmentType(0) = "3")) Then
If (note.IsResponse) Then
Set parentnote = db.GetDocumentBYUNID(note.ParentDocumentUNID)
Call CreateInviteeTable(parentnote)
Else
Call CreateInviteeTable(note)
End If
NeedsReschedule = True
End If
If (NeedsReschedule) Then note.SequenceNum = note.SequenceNum(0) + 1
If Action = "Drop" Then
If note.HasItem("OrgRepeat") Then Call RepeatSave
Elseif note.HasItem("OrgRepeat") Then
note.RemoveItem("OrgRepeat")
note.RemoveItem("$Ref")
Messagebox "Pasting an instance of a repeating appointment creates a non-repeating appointment.", 64, "Paste"
End If
If CancelChange = True Then Exit Sub
If (NeedsReschedule) Then Call RescheduleAppointment
Call MarkTempFields(note)
Call note.Save(True, True, True)
End If
End If
Exit Sub
ErrorRoutine:
Messagebox Error & " (PutAppointment)"
Exit Sub
End Sub
0 0
,` Jh
'++LotusScript Development Environment:2:5:(Options):0:66
'++LotusScript Development Environment:2:5:(Forward):0:1
Declare Sub Postdragdrop(Source As Notesuiview)
Declare Sub Regiondoubleclick(Source As Notesuiview)
Declare Sub Querydragdrop(Source As Notesuiview, Continue As Variant)
Declare Sub Postpaste(Source As Notesuiview)
Declare Sub Queryopen(Source As Notesuiview, Continue As Variant)
'++LotusScript Development Environment:2:5:(Declarations):0:2
'++LotusScript Development Environment:2:2:BindEvents:1:129
Private Sub BindEvents(Byval Objectname_ As String)
Static Source As NOTESUIVIEW
Set Source = Bind(Objectname_)
On Event Postdragdrop From Source Call Postdragdrop
On Event Regiondoubleclick From Source Call Regiondoubleclick
On Event Querydragdrop From Source Call Querydragdrop
On Event Postpaste From Source Call Postpaste
On Event Queryopen From Source Call Queryopen
End Sub
'++LotusScript Development Environment:2:2:Postdragdrop:1:12
Sub Postdragdrop(Source As Notesuiview)
Call SetViewObjectVariables(source)
Call GetCalendarOwner
Call PutCalendarEntry("Drop")
End Sub
'++LotusScript Development Environment:2:2:Regiondoubleclick:1:12
Sub Regiondoubleclick(Source As Notesuiview)
Set ws = New NotesUIWorkspace
Set session = New NotesSession
If source.CalendarDateTime <> "" Then Call ws.ComposeDocument("", "", "Appointment")
End Sub
'++LotusScript Development Environment:2:2:Querydragdrop:1:12
Sub Querydragdrop(Source As Notesuiview, Continue As Variant)
End Sub
'++LotusScript Development Environment:2:2:Postpaste:1:12
Sub Postpaste(Source As Notesuiview)
Call SetViewObjectVariables(source)
GetCalendarOwner
PutCalendarEntry("Paste")
End Sub
'++LotusScript Development Environment:2:2:Queryopen:1:12
Sub Queryopen(Source As Notesuiview, Continue As Variant)
'++LotusScript Development Environment:2:2:EmailModeChange:1:8
Sub EmailModeChange
If note Is Nothing Then Call InstantiateObjectVariables
'If this is a message that was written by you or your mail file, we need to remove any options fields
If note.From(0) = Owner Or note.From(0) = session.UserName Or _
note.Principal(0) = Owner Or note.Principal(0) = session.UserName Then
note.RemoveItem("MailOptions")
note.RemoveItem("SaveOptions")
If Not(note.HasItem("SecureMail")) Then CheckSecureMail
'If this is a message that was not written by you we do not present the mail dialog
'but we do want to force processing into QuerySave
Else
note.MailOptions = "0"
note.RemoveItem("SaveOptions")
End If
If uidoc.EditMode Then uidoc.Reload
End Sub
'++LotusScript Development Environment:2:2:EmailSave:1:8
Sub EmailSave(Continue)
DoNotClose = False
If note Is Nothing Then Call InstantiateObjectVariables
note.RemoveItem("MailOptions")
note.RemoveItem("SaveOptions")
Action = note.tmpAction(0)
If note.HasItem("IsMailStationery") Then
If Action <> "RenameStationery" Then
Call SaveDialog("Stationery")
If ContinueSave = IDCANCEL Then continue = False
If ContinueSave <> IDYES Then
uidoc.reload
Exit Sub
End If
End If
End If
Select Case Action
Case "SaveAsStationery"
sName = Inputbox$("What would you like to call this Stationery?", "Save as Stationery", "-Untitled-")
If sName = "" Then
Continue = False
note.RemoveItem("tmpAction")
Exit Sub
End If
If NewDocument Then
note.IsMailStationery = 1
note.MailStationeryName = sName
note.MailOptions = "0"
note.SaveOptions = "1"
Else
note.SaveOptions = "0"
Set newnote = New NotesDocument(db)
Call note.CopyAllItems(newnote)
ItemList = newnote.Items
Forall i In ItemList
If Lcase(Left(i.Name, 3)) = "tmp" Then i.Remove
End Forall
newnote.IsMailStationery = 1
newnote.MailStationeryName = sName
newnote.Form = "Memo"
newnote.RemoveItem("PostedDate")
newnote.RemoveItem("DeliveredDate")
newnote.Save True, True
ws.ViewRefresh
End If
Messagebox "This Message has been saved as Stationery in your Drafts folder. A new message will be created every time you open this Stationery.", 0, "Save as Stationery"
note.RemoveItem("tmpAction")
Call uidoc.close
Case "RenameStationery"
MailStationeryName = note.MailStationeryName
sName = Inputbox$("What would you like to call this Stationery?", "Save as Stationery", MailStationeryName(0))
If sName = "" Then
note.MailOptions = "0"
note.RemoveItem("tmpAction")
DoNotClose = True
Continue = False
Exit Sub
End If
note.MailStationeryName = sName
note.MailOptions = "0"
note.SaveOptions = "1"
Case "SaveAsDraft", "SaveAndFile", "SendAndFile", "ConvertNewDoc"
note.MailOptions = "0"
note.SaveOptions = "1"
Case "Send"
note.MailOptions = "0"
note.SaveOptions = "0"
Case "Mailing"
'We do not want to do anything if mailing is in process (like from the Send button)
Case "ConvertToTask"
note.RemoveItem("DeliveredDate")
note.RemoveItem("PostedDate")
note.SendTo = ""
note.CopyTo = ""
note.SaveOptions ="1"
note.MailOptions = "0"
note.Form = "Task"
note.AssignState = 0
note.ExcludeFromView = "D"
Call note.ReplaceItemValue("_ViewIcon", 168)
Case Else
'If this is a message did not originate in this mailfile (it was sent here and therefore has DeliveredDate) we do not present the mail dialog
If note.HasItem("DeliveredDate") Then
note.MailOptions = "0"
note.SaveOptions = "1"
Call SaveDialog("Document")
If ContinueSave = IDCANCEL Then continue = False
If ContinueSave <> IDYES Then
uidoc.reload
Exit Sub
End If
End If
End Select
note.RemoveItem("tmpAction")
If note.HasItem("$VersionOpt") Then Call note.ReplaceItemValue("$VersionOpt", "0")
'If Not(note.HasItem("AuthorList")) Then Set item = New NotesItem(note, "AuthorList", note.From, AUTHORS)
uidoc.Reload
End Sub
'++LotusScript Development Environment:2:2:EmailClose:1:8
Sub EmailClose(Continue)
If DoNotClose Then
DoNotClose = False
Continue = False
'This backs out anything you did previously to MailOptions and SaveOptions and will force you back into QuerySave next time you try to exit
note.RemoveItem("MailOptions")
note.RemoveItem("SaveOptions")
uidoc.reload
End If
If TaskReply Then
Set namelookup = New NotesName(note.SendTo(0))
Messagebox "Notification has been sent to " & namelookup.Common & ".", 0, "Task Message"
End If
End Sub
'++LotusScript Development Environment:2:2:SaveDialog:1:8
Sub SaveDialog(SavedDoc)
ContinueSave = Messagebox("Do you wish to save this " & SavedDoc & "?", MB_YESNOCANCEL, "Save " & SavedDoc)
Select Case ContinueSave
Case IDCANCEL
note.MailOptions = "0"
'This will force us into querysave next time - this time it will set continue = false so no save will occur
note.SaveOptions = "1"
Case IDNO
note.SaveOptions = "0"
Case IDYES
note.SaveOptions = "1"
End Select
End Sub
'++LotusScript Development Environment:2:2:CheckSecureMail:1:8
Sub CheckSecureMail
'If SecureMail = 1 in notes.ini all mail gets Signed and Encrypted and the user is unable to override it
'now we need to update the original invitation document
Context = GetContext
Select Case Context
Case 1,3
'1 = non-repeat notice; 3 = repeat notice; in either case, update the parent note
Call UpdateOriginalInvitation(parentnote)
Case 2,4
'2 = repeat instance; 4 = non-repeat instance; in either case, update the current note
Call UpdateOriginalInvitation(note)
End Select
If Not(IsAgentProcessing) Then Messagebox "A notice has been sent informing " & ChairName(0) & " that you will be attending. A meeting document has been added to your Calendar.",0,"Status"
'see if we should remove this from the inbox
If (profile.AutoRemoveFromInbox(0) = "1") Then note.RemoveFromFolder("($Inbox)")
Exit Sub
ErrorRoutine:
Messagebox Error & " (AcceptInvitation)"
Exit Sub
End Sub
'++LotusScript Development Environment:2:2:DeclineInvitation:1:8
Sub DeclineInvitation
*This routine is called whenever the user declines an invitation or
changes their mind after accepting an invitation
*A notice document is sent to the chair informing them of our decline
*The main invitation document is updated to reflect our decline
'1 = non-repeat notice; 3 = repeat notice; in either case, update the parent note
Call UpdateOriginalInvitation(parentnote)
parentnote.Delegee = DelegeeName(0)
parentnote.save True,False,True
Case 2,4
'2 = repeat instance; 4 = non-repeat instance; in either case, update the current note
Call UpdateOriginalInvitation(note)
End Select
Messagebox "An invitation has been sent to " & Delegeename(0) & ". A notice has been sent informing " & ChairName(0) & " that you will not be attending.",0,"Status"
'remove the sendto on the note
note.SendTo = ""
'see if we should remove this from the inbox
If (profile.AutoRemoveFromInbox(0) = "1") Then note.RemoveFromFolder("($Inbox)")
DelegateInvitation = 0
Else
DelegateInvitation = 1
End If
Exit Function
ErrorRoutine:
Messagebox Error & " (DelegateInvitation)"
Call MarkTempFields(note)
Call note.RemoveItem("tmpUserActions")
DelegateInvitation = 1
Exit Function
End Function
'++LotusScript Development Environment:2:2:CounterPropose:1:8
Sub CounterPropose
*This routine is called whenever the user wants to send a counter propose notice
*This routine sends a counter propose notice to the chair and updates the main
'++LotusScript Development Environment:2:2:GetMostRecentUpdateNotice:1:8
Sub GetMostRecentUpdateNotice(Context As Integer)
*This is the bulk of the processing for notice responses
*This routine iterates through the responses of a particular meeting invitation
and gets the most recent notice sent by the chair
%END REM
Dim index As Integer
Dim MainSequence As Integer
If (note.IsResponse) And (parentnote Is Nothing) Then Exit Sub
On Error Goto ErrorRoutine
Redim UpdateResponses(2)
numResponses = 0
'get the context that this document was opened in
Context = GetContext
Select Case context
Case 1,3
'1 means the current note is a non-repeat notice, 3 = repeat notice
Set documents = parentnote.Responses
MainSequence = parentnote.SequenceNum(0)
Case 2,4
'2 means repeat instance, 4 means non-repeat instance
Set documents = note.Responses
MainSequence = note.SequenceNum(0)
End Select
If (documents.Count = 0) Then Exit Sub
Set response = documents.GetFirstDocument
While Not(response Is Nothing)
'make sure we have a valid document
If (response.Form(0) = "Notice") Then
'get the necessary values for this update
GetUpdateResponseItems(Context)
'if the sequence is >= the original invitation sequence, we can process it
If (UpdateSequence >= MainSequence) Then
'if we haven't added anything to the array, add this one
If (numResponses = 0) Then
Call SetUpdateAsMostRecent(MainSequence)
Else
If (UpdateAction = ORS_MSGTYPE_CONFIRMATION) Then
index =1
Else
index = 0
End If
'if the UpdateSequence value is greater than the existing value, add this response
If (UpdateSequence > UpdateResponses(index).sequencenum) Then
Call SetUpdateAsMostRecent(MainSequence)
Else
'if the UpdateSequence = the existing value, compare creation dates
If (UpdateSequence = UpdateResponses(index).sequencenum) And (UpdateCreation > UpdateResponses(index).creationdate) Then Call SetUpdateAsMostRecent(MainSequence)
End If
End If
End If
End If
Set response = documents.GetNextDocument(response)
Wend
Exit Sub
ErrorRoutine:
Messagebox Error & " (GetMostRecentUpdateNotice)"
Exit Sub
End Sub
'++LotusScript Development Environment:2:2:CheckForNoticeUpdates:1:8
Sub CheckForNoticeUpdates
*This routine is called from the QueryOpen event on notice and appointment forms
*It is only called if the mail owner != the meeting chair (i.e. we are an invitee)
*This routine calls GetMostRecentResponseNotice and performs an action based upon the notice
%END REM
Dim Context As Integer
Dim lDoc As NotesDocument
Call GetMostRecentUpdateNotice(Context)
If (documents.Count = 0) Then Exit Sub 'there are no responses
Select Case Context
'1 means the current note is a non-repeat notice, 3 = repeat notice
Case 1,3
Set lDoc = parentnote
Case 2,4
'2 means repeat instance, 4 means non-repeat instance
Set lDoc = note
End Select
On Error Goto ErrorRoutine
'if there are any responses waiting, see what the most recent one is;
Select Case UpdateResponses(0).action
Case ORS_MSGTYPE_RESCHEDULE
'if the user is not reading the most upto date notice, see if we should open the reschedule notice or not
If (UpdateResponses(0).misc2 <> note.UniversalID) Then
If (UpdateResponses(0).sequencenum > lDoc.SequenceNum(0)) Then
If IsWebClient Then
note.tmpConfirmMsg = "This meeting has been rescheduled. Check you In Box or Meetings view for the latest notice."
Else
If (Messagebox("This meeting has been rescheduled. Do you want to open the Reschedule notice now?.",33,"Open Reschedule") = 1) Then
'the user wants us to open the reschedule notice
OpenReschedule = True
Else
OpenReschedule = False
note.DoNotProcess = True
End If
End If
End If
Else
'the user is reading the most upto date reschedule notice -> make sure we can process this document
If (UpdateResponses(0).sequencenum <= parentnote.SequenceNum(0)) Then note.DoNotProcess = True
End If
Case ORS_MSGTYPE_CANCEL
staticstring = "This meeting has been cancelled."
If IsWebClient Then
note.tmpConfirmMsg = staticstring
Else
If (lDoc.NoticeType(0) = ORS_MSGTYPE_ACCEPT) Then
Messagebox staticstring & " The calendar entry will be updated to reflect this change",0,"Status"
Call DeCommitAppointment(lDoc)
Else
Messagebox staticstring, 0, "Status"
End If
End If
note.DoNotProcess = True
'we need to do this here since this is not handled in QuerySave
If Not IsWebClient And note.HasItem("OrgRepeat") Then
Action = "Cancel"
Call RepeatSave
End If
Case ORS_MSGTYPE_STATUSUPDATE
If (UpdateResponses(0).misc1 = ORS_STATUS_REMOVED) Then
'this user was uninvited
staticstring = "You are no longer required to attend this meeting."
If IsWebClient Then
note.tmpConfirmMsg = staticstring
Else
If (lDoc.NoticeType(0) = ORS_MSGTYPE_ACCEPT) Then
Messagebox staticstring & " The calendar entry will be updated to reflect this change",0,"Status"
Call DeCommitAppointment(lDoc)
Else
Messagebox staticstring,0,"Status"
End If
'we need to do this here since this is not handled in QuerySave
If note.HasItem("OrgRepeat") Then
Action = "Cancel"
Call RepeatSave
End If
End If
Else
'the user is being required to attend
If (lDoc.NoticeType(0) <> ORS_MSGTYPE_ACCEPT) Then
staticstring = "You are required to attend this meeting."
If IsWebClient Then
note.tmpConfirmMsg = staticstring
Else
Messagebox staticstring & " The calendar entry will be created to reflect this change",0,"Status"
Call CommitAppointment(lDoc)
End If
End If
End If
note.DoNotProcess = True
End Select
'see if there are any confirmation notice
If (UpdateResponses(1).Action = ORS_MSGTYPE_CONFIRMATION) Then
'if the user is not reading the most upto date notice, and their are no other update notices more recent than this one, then display the message
If (UpdateResponses(1).misc2 <> note.UniversalID) And _
((UpdateResponses(1).sequencenum > UpdateResponses(0).SequenceNum) Or _
(UpdateResponses(1).creationdate > UpdateResponses(0).creationdate)) Then
'++LotusScript Development Environment:2:1:GetParentDocument:1:8
Function GetParentDocument() As Integer
*this routine gets the parent document for a given note
%END REM
On Error Resume Next
GetParentDocument = False
Set parentnote = db.GetDocumentByUNID(note.ParentDocumentUNID)
If (parentnote Is Nothing) Then
'if this is a non-repeating note, see if we should re-create the document
If Not(note.hasitem("OrgRepeat")) Then
If (Msgbox("The appointment document has been deleted from your calendar, do you want to re-create it?",52) = 6) Then
Call ResurrectParentDoc
GetParentDocument =True
Exit Function
Else
note.tmpNoParent = True
note.DoNotProcess = True
Exit Function
End If
Else
'this is a repeating notice; see if the user is trying to process a response without processing the repeat parent
If (note.HasItem("RepeatParentUNID")) Then
Set parentnote = db.GetDocumentByUNID(note.RepeatParentUNID(0))
If (parentnote Is Nothing) Then
'the repeat set has been deleted; see if the user wants to continue on by creating a non-repeat instance
If(Msgbox("The parent document has been deleted from your calendar and was part of a repeat set. Do you want to re-create it as a single appointment?",52) = 6) Then
Call ResurrectParentDoc
GetParentDocument =True
Exit Function
Else
note.tmpNoParent = True
note.DoNotProcess = True
Exit Function
End If
Else
'the parent repeat set has not been deleted; see if it is an invitation
If (parentnote.NoticeType(0) = ORS_MSGTYPE_INVITE) Then
Msgbox "You need to respond to the original meeting invitation that this notice belongs to. After clicking on OK, the original invitation will be opened.",0,"Status"
OpenRepeatParent = True
Exit Function
Else
'the parent repeat set has been processed; see if the user wants to recreate this as a non-repeating instance
If(Msgbox("The parent document has been deleted from your calendar and was part of a repeat set. Do you want to re-create it as a single appointment?",52) = 6) Then
'++LotusScript Development Environment:2:1:CheckIfConflictExists:1:8
Function CheckIfConflictExists As Integer
*This function is called only if the user specifies conflict warnings in the profile
*This function can be called when creation or accepting meeting documents
*The AutoProcessNotices agent ALWAYS calls this routine
*This routine determines if a meeting time fits within the profile settings and is available
%END REM
Dim calentries As NotesDocumentCollection
Dim localView As NotesView
Dim othernote As NotesDocument
Dim tr As NotesDateRange
Dim sdt As NotesDateTime
Dim edt As NotesDateTime
Dim intl As NotesInternational
Dim nstartitem As NotesItem 'note startdatetime item
Dim nenditem As NotesItem 'note enddatetime item
Dim ostartitem As NotesItem 'othernote startdatetime item
Dim oenditem As NotesItem 'othernote enddatetime item
Dim nstartdt As NotesDateTime
Dim nenddt As NotesDateTime
Dim ostartdt As NotesDateTime
Dim oenddt As NotesDateTime
'first, check the profile settings -> if there is a conflict in the profile, then we don't need to check with existing appointments
'we only do this check if the autoprocessing agent is running
If (IsAgentProcessing) Then
If(CheckProfileTimes(note)) Then
CheckIfConflictExists = True
Exit Function
End If
End If
On Error Goto ErrorRoutine
Set localView = db.GetView("Calendar")
Set intl = session.International
CheckIfConflictExists = False
'get all of the documents that fit under the invited day
'othernote refers to existing appointments
Set nstartitem = note.GetFirstItem("StartDateTime")
Set nenditem = note.GetFirstItem("EndDateTime")
Set sdt = New NotesDateTime(nstartitem.DateTimeValue.DateOnly & " 00" & intl.TimeSep & "00" & intl.TimeSep & "01")
'if this is an event, use the enddatetime date
If (note.AppointmentType(0) = "2") Then
Set edt = New NotesDateTime(nenditem.DateTimeValue.DateOnly & " 23" & intl.TimeSep & "59" & intl.TimeSep & "59")
Else
Set edt = New NotesDateTime(nstartitem.DateTimeValue.DateOnly & " 23" & intl.TimeSep & "59" & intl.TimeSep & "59")
End If
Set tr = session.CreateDateRange
Set tr.StartDateTime = sdt
Set tr.EndDateTime = edt
Set nstartdt = New NotesDateTime(sdt.DateOnly & " " & nstartitem.DateTimeValue.TimeOnly)
Set nenddt = New NotesDateTime(sdt.DateOnly & " " & nenditem.DateTimeValue.TimeOnly)
'if the agent is running, we should mark the OrgDontDoubleBook item on the note
If (IsAgentProcessing) Then note.OrgDontDoubleBook = "1"
Set calentries = localView.GetAllDocumentsByKey(tr, False)
Set othernote = calentries.GetFirstDocument
Do While Not(othernote Is Nothing)
If (othernote.Form(0) <> "Task") Then
Set ostartitem = othernote.GetFirstItem("StartDateTime")
check to see if
the invited StartDateTime falls between a scheduled appointment,
the invited EndDateTime falls between a scheduled appointment,
the invitation surrounds an existing appointment
date1 = the Starting time of the othernote; date2 = the ending time of the othernote; dateItem = the starttime of the invitation,dateItem2 = the endtime of the invitation
%END REM
Set oenditem = othernote.GetFirstItem("EndDateTime")
'if the other document is not busy (i.e. is PencilledIn), then we don't need to check it
If (othernote.BookFreeTime(0) <> "1") Then
If(ProcessConflict(othernote)) Then
'we need to instantiate the date/time objects correctly
'othernote could be an event so the date portion of StartDateTime and EndDateTime are incorrect, but NIF return them to us
Set ostartdt = New NotesDateTime(nstartdt.DAteOnly & " " & ostartitem.DateTimeValue.TimeOnly)
Set oenddt = New NotesDateTime(nstartdt.DAteOnly & " " & oenditem.DateTimeValue.TimeOnly)
If ((nstartdt.TimeDifference(ostartdt) >= 0) And (oenddt.TimeDifference(nstartdt) > 0 )) Or _
((nenddt.TimeDifference(ostartdt) > 0) And (oenddt.TimeDifference(nenddt) >= 0 )) Or _
((ostartdt.TimeDifference(nstartdt) >= 0) And (nenddt.TimeDifference(oenddt) > 0 )) Then
'if the autoprocessing agent is running, simply return
If (IsAgentProcessing) Then
CheckIfConflictExists = True
Exit Do
End If
If (note.Form(0) = "Appointment") Then
MessageText$ = "Do you want to schedule this appointment anyway?"
Else
MessageText$ = "Do you want to Accept anyway?"
End If
If Messagebox("There is already an appointment in this time slot. " & MessageText$, _
MB_YESNO, "Conflict") = IDNO Then
CheckIfConflictExists = True
Exit Do 'we exit so that we don't waste time iterating through the view
Else
Exit Do 'we exit so that we don't waste time iterating through the view
End If
End If
End If
End If
End If
Set othernote = calentries.GetNextDocument(othernote)
Loop
Exit Function
ErrorRoutine:
Messagebox Error & " (CheckIfConflictExists)"
Exit Function
End Function
'++LotusScript Development Environment:2:2:AddInviteeComment:1:8
Sub AddInviteeComment
*This routine is called to include invitee's comments
%END REM
notice.IncludeComment = "1"
notice.Comments = note.Comments
End Sub
'++LotusScript Development Environment:2:2:CreateNoticeDocument:1:8
Sub CreateNoticeDocument(Subject As String,NoticeType As String,ViewIcon As Integer,Mode As Integer)
*This routine creates the outgoing notice document, either from the chair to the invitee's
or from an invitee to a chair
*This routine adds standard fields to the notice regardless of the type of notice
*Parameters
Subject -> value of subject item
NoticeType -> type of notice being sent
ViewIcon -> icon to display in view
Mode -> 1 = chair is sending, 2 = invitee is sending
%END REM
Dim ChairItem As NotesItem
Dim dummydoc As NotesDocument
'create the notice object
Set notice = New NotesDocument(db)
'determine the context of the current note
Context = GetContext
Select Case Context
Case 1,3
'1 = non-repeat notice, 3 = repeat notice -> make the notice doc a response to the parentnote
If(note.HasItem("ApptUNID")) Then
If(note.ApptUNID(0) <> parentnote.UniversalID) Then
Set dummydoc = New NotesDocument(db)
dummydoc.UniversalID = note.ApptUNID(0)
Call notice.MakeResponse(dummydoc)
notice.ApptUNID = note.ApptUNID
Else
Call notice.MakeResponse(parentnote)
notice.ApptUNID = parentnote.UniversalID
End If
Else
Call notice.MakeResponse(parentnote)
notice.ApptUNID = parentnote.UniversalID
End If
Case 2,4
'2 = repeat instance, 4 = non-repeat instance -> make the notice doc a response to the current note
If(note.HasItem("ApptUNID")) Then
If(note.ApptUNID(0) <> note.UniversalID) Then
Set dummydoc = New NotesDocument(db)
dummydoc.UniversalID = note.ApptUNID(0)
Call notice.MakeResponse(dummydoc)
notice.ApptUNID = note.ApptUNID
Else
Call notice.MakeResponse(note)
notice.ApptUNID = note.UniversalID
End If
Else
Call notice.MakeResponse(note)
notice.ApptUNID = note.UniversalID
End If
End Select
Call notice.ReplaceItemValue("$RefOptions","1")
'add default items regardless of notice type
notice.Form = "Notice"
notice.StartDate = note.StartDate
notice.StartDateTime = note.StartDateTime
notice.EndDateTime = note.EndDateTime
notice.AppointmentType = "3"
notice.SequenceNum = note.SequenceNum(0)
notice.ExcludeFromView = "D"
notice.Room = note.Room
notice.Principal = Owner
notice.NoticeType = NoticeType
notice.Broadcast = note.Broadcast
'add the required attendees -> we need to know what context the current document is in
'this is because non-repeat notices, repeat notices, and non-repeat appointments have this information
'repeat instances need to get this info from their parent
Select Case Context
Case 1,3,4
'1 = non-repeat notice,3 = repeat notice,4 = non-repeat instance -> get the values from the current note
notice.RequiredAttendees = note.RequiredAttendees
notice.OptionalAttendees = note.OptionalAttendees
Case 2
'the repeat instance document does not have this information -> get it from the parent